【发布时间】:2013-03-13 22:33:56
【问题描述】:
我一直在寻找一种方法来从需要存在的文件列表中列出不存在的文件。这些文件可以存在于多个位置。我现在拥有的:
#!/bin/bash
fileslist="$1"
while read fn
do
if [ ! -f `find . -type f -name $fn ` ];
then
echo $fn
fi
done < $fileslist
如果文件不存在,find 命令将不会打印任何内容,并且测试不会进行。删除 not 并创建 if then else 条件并不能解决问题。
如何打印从文件名列表中找不到的文件名?
新脚本:
#!/bin/bash
fileslist="$1"
foundfiles="~/tmp/tmp`date +%Y%m%d%H%M%S`.txt"
touch $foundfiles
while read fn
do
`find . -type f -name $fn | sed 's:./.*/::' >> $foundfiles`
done < $fileslist
cat $fileslist $foundfiles | sort | uniq -u
rm $foundfiles
【问题讨论】:
-
找出你能做的并与你期望的列表进行比较?
-
@cdeszaq,我想到的第一件事,但如果没有临时文件或纯粹的 bashisms 就想不出办法:)
-
目前我创建了一个我可以找到的列表并与文件列表进行比较。我想我也许可以自动化这一些来创建我必须处理的文件列表。
-
也许 find 不是正确的工具。有没有我没有想到的替代方案?
-
我在家中在 Fedora 16 上测试了我的原始脚本,它似乎可以按照我的意愿工作。我在工作中使用 RHEL 5.7。这让我认为,发布的一些对我不起作用的答案可能对其他人有效。
标签: bash