Unix查找缺少文件的目录

时间:2013-06-26 07:55:46

标签: unix find

如何使用find标识那些不包含具有指定名称的文件的目录?我想创建一个文件,其中包含缺少某个文件的所有目录的列表。

3 个答案:

答案 0 :(得分:2)

查找目录:

find -type d > DIRS

使用文件查找目录:

find -type f -name 'SpecificName' | sed 's!/[^/]*$!!' > FILEDIRS

找出差异:

grep DIRS -vf FILEDIRS

答案 1 :(得分:1)

有很多不同的方法可以解决这个问题 - 这是我采取的方法(bash假设):

while read d
do
  [[ -r ${d}/SpecificFile.txt ]] || echo ${d}
done < <(find . -type d -print)

如果目标目录仅存在于某个深度,则可以添加其他选项find以限制要检查的目录数...

答案 2 :(得分:0)

这是main.cpp文件的示例。在该示例中,找到了不包含main.cpp的所有目录。如您所见,我首先获得所有文件夹的列表,然后获取具有main.cpp的文件夹列表,然后运行diff以获得两个列表之间的差异:

diff  \
  <(find . -exec readlink -f {} \; | sed 's/\(.*\)\/.*$/\1/' | sort | uniq) \
  <(find . -name main.cpp  -exec readlink -f {} \; | sed 's/\(.*\)\/.*$/\1/' | sort | uniq) \
  | sed -n 's/< \(.*\)/\1/p'