bri*_*ice 19 unix bash scripting find
我有一个清单文件,它只是换行符分隔的文件名列表.如何从文件夹中删除清单中未命名的所有文件?
我试图find ./ ! -name "filename"动态构建一个命令:
command="find ./ ! -name \"MANIFEST\" "
for line in `cat MANIFEST`; do
command=${command}"! -name \"${line}\" "
done
command=${command} -exec echo {} \;
$command
Run Code Online (Sandbox Code Playgroud)
但文件仍然存在.
[注意:]我知道这使用echo.我想在使用它之前检查我的命令.
解决方案:(感谢PixelBeat)
ls -1 > ALLFILES
sort MANIFEST MANIFEST ALLFILES | uniq -u | xargs rm
Run Code Online (Sandbox Code Playgroud)
没有临时文件:
ls -1 | sort MANIFEST MANIFEST - | uniq -u | xargs rm
Run Code Online (Sandbox Code Playgroud)
两者都忽略文件是否已排序.
Jür*_*zel 14
对于当前目录中的每个文件,MANIFEST文件中的grep文件名和rm 文件(如果不匹配).
for file in *
do grep -q -F "$file" PATH_TO_YOUR_MANIFIST || rm "$file"
done
Run Code Online (Sandbox Code Playgroud)
pix*_*eat 13
使用http://www.pixelbeat.org/cmdline.html#sets中的"设置差异"模式
(find ./ -type f -printf "%P\n"; cat MANIFEST MANIFEST; echo MANIFEST) |
sort | uniq -u | xargs -r rm
Run Code Online (Sandbox Code Playgroud)
注意我列出两次MANIFEST,以防有列出的文件实际上不存在.另请注意,上面支持子目录中的文件
弄清楚了:
ls -1 > ALLFILES
comm -3 MANIFEST ALLFILES | xargs rm
Run Code Online (Sandbox Code Playgroud)