我有一个清单文件,它只是一个以换行符分隔的文件名列表。如何从文件夹中删除所有未在清单中命名的文件?
我尝试动态构建find ./ ! -name "filename"
命令:
command="find ./ ! -name \"MANIFEST\" "
for line in `cat MANIFEST`; do
command=${command}"! -name \"${line}\" "
done
command=${command} -exec echo {} \;
$command
但文件仍然存在。
[注:] 我知道这里使用了echo。我想在使用它之前检查我的命令做了什么。
解决方案:(感谢PixelBeat)
ls -1 > ALLFILES
sort MANIFEST MANIFEST ALLFILES | uniq -u | xargs rm
无需临时文件:
ls -1 | sort MANIFEST MANIFEST - | uniq -u | xargs rm
两者都会忽略文件是否已排序。