有几种方法可以使用find完成此操作。
方法 1 不那么笨拙并且可以很好地处理奇怪的目录名称(例如,包含换行符的目录名称),但是如果有很多目录,方法 2 应该更快。
find DIR -type d -mindepth 1 -maxdepth 1 -not -exec test -f {}/FILENAME \; \
-print | sort
Run Code Online (Sandbox Code Playgroud)
find DIR -type d -mindepth 1 -maxdepth 1-type d在DIR 中查找所有目录 ( ) ,深度为 1。
-not -exec test -f {}/FILENAME \;当且仅当在当前处理的目录 ( ) 中找不到名为FILENAME的文件时才为真{}。
-print 将输出所需的目录名称。
如果需要,sort将按字母顺序对输出进行排序。
( find DIR -type f -mindepth 2 -maxdepth 2 -name FILENAME -printf "%h\n" ; \
find DIR -type d -mindepth 1 -maxdepth 1 ) | sort | uniq -u
Run Code Online (Sandbox Code Playgroud)
find DIR -type f -mindepth 2 -maxdepth 2 -name FILENAME在DIR的子目录中查找所有-type f名为FILENAME 的文件 ( ) (深度为 1 的目录的文件具有深度为 2)。
-print "%h\n"打印包含名为FILENAME 的文件的目录的名称,后跟换行符。
find DIR -type d -mindepth 1 -maxdepth 1列出DIR中的所有目录 ( -type d) ,深度为 1。
sort按字母顺序对输出进行排序(输出到 时必须排序uniq)。
uniq -u 只打印独特的线条。
DIR 的每个子目录至少被列出一次,但那些包含名为FILENAME的文件被列出两次。uniq -u消除了后一种。
| 归档时间: |
|
| 查看次数: |
4144 次 |
| 最近记录: |