Unix 查找缺失文件的目录

3
我该如何使用find来识别不包含指定文件的目录?我想创建一个包含所有缺少特定文件的目录列表的文件。

也许更适合在[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)上提问。 - michaelb958--GoFundMonica
3个回答

3

查找目录:

find -type d > DIRS

查找包含该文件的目录:

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

找出差异:

grep DIRS -vf FILEDIRS

使用以下命令可以更简单地提取包含该文件的唯一目录名称:find -type f -name "SpecificName" -exec dirname {} \; | uniq。对于目录,也可以使用相同的技巧。 - Jean-Baptiste Yunès
如果目录列表很长(例如>10000),请使用grep -Ffgrep来加快速度。 - Heiko

1

有很多不同的方法可以处理这个问题 - 这是我会采取的方法(假设使用bash):

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

如果您的目标目录仅存在于特定深度,您可以添加其他选项到find以限制要检查的目录数量...

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'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接