我正在尝试编写一个命令来列出/usr/share/icons
包含名为“places”的文件夹的所有目录,但是仅有的在第一个子目录中。
为了使事情更清楚,有很多图标主题,如下所示:
/usr/share/icons/theme/places
还有许多仅用于通用图标的目录,如下所示:
/usr/share/icons/theme2/32x32/places
我只想列出第一个场景中的目录。
更新:当我说我需要它来列出 /usr/share/icons 中的目录时,我的意思是我需要输出仅包含文件夹名称本身。这意味着,我认为 awk 或 sed 是必要的。再次感谢。
答案1
编辑
使用bash
glob 星号就足够了。这将匹配其中所有/usr/share/icons/
包含places
子目录的目录。
$ ls -d /usr/share/icons/*/places
/usr/share/icons/breeze-dark/places/
/usr/share/icons/breeze/places/
/usr/share/icons/Deepin-2013/places/
/usr/share/icons/Deepin-icons/places/
/usr/share/icons/Deepin/places/
/usr/share/icons/Deepin-sapphire/places/
/usr/share/icons/Faenza-Dark/places/
原始答案
该find
命令通常用于搜索文件或目录。下面的命令将递归地进入下面的所有目录,/usr/share/icons
并列出places
名称中包含 的所有目录。
find /usr/share/icons -type d -iname "*places*"
示例输出
$ find /usr/share/icons -type d -iname "*places*" | head -n 5
/usr/share/icons/Numix-Light/scalable/places
/usr/share/icons/Humanity/places
/usr/share/icons/ubuntu-mono-light/places
/usr/share/icons/Deepin-2013/places
/usr/share/icons/Human/48x48/places
编辑
-printf "%h\n"
允许查找找到文件名的目录路径;awk
使用字段分隔符/
允许打印最后一个($NF
)项。
================
xieerqi:
$ find /usr/share/icons -maxdepth 2 -type d -iname "*places*" -printf "%h\n"
/usr/share/icons/Humanity
/usr/share/icons/ubuntu-mono-light
/usr/share/icons/Deepin-2013
/usr/share/icons/Faenza-Dark
/usr/share/icons/ubuntu-mono-dark
/usr/share/icons/Deepin-icons
/usr/share/icons/Deepin-sapphire
/usr/share/icons/Deepin
/usr/share/icons/Humanity-Dark
/usr/share/icons/Faenza
/usr/share/icons/ubuntukylin-icon-theme
/usr/share/icons/unity-icon-theme
================
xieerqi:
$ find /usr/share/icons -maxdepth 2 -type d -iname "*places*" -printf "%h\n" | awk -F '/' '{print $NF}'
Humanity
ubuntu-mono-light
Deepin-2013
Faenza-Dark
ubuntu-mono-dark
Deepin-icons
Deepin-sapphire
Deepin
Humanity-Dark
Faenza
ubuntukylin-icon-theme
unity-icon-theme