有几种方法可以使用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 次 |
最近记录: |