我有一个包含1000多个文件的目录。在一个文本文件中,我大约有50个文件名,每行一个。我想删除目录中所有文件名与列表中的条目不符的文件。最好的方法是什么?我启动了一个shell脚本,但是无法确定要确定文件名在列表中的正确命令。谢谢。
我意识到,任何询问如何删除文件的问题都必须格外小心。我的第一个答案太仓促,我没有接受文件列表可能格式错误以与egrep一起使用的事实。我编辑了答案以减少这种风险。
这应该适用于名称中没有空格的文件:
首先重建您的文件列表,以确保匹配确切的文件名:
sed -e 's,^,^,' -e 's,$,$,' filelist > newfilelist
建立rm命令
cd your_directory
ls | egrep -vf newfilelist | xargs -n 1 echo rm > rmscript
检查rm脚本是否适合您(可以使用“ vim”或“ less”来完成)。
然后执行以下操作:
sh -x rmscript
如果文件名中带有空格(如果文件名中带有,"
则将无法使用):
ls | egrep -vf newfilelist | sed 's,^\(.*\)$,rm "\1",' > rmscript
当然,文件列表不应位于同一目录中!
编辑:
Nathan的文件列表包含与目录中所有文件匹配的名称(例如“ html”匹配“ bob.html”)。因此,由于egrep -vf
吸收了所有流,因此没有删除任何内容。我添加了一个命令,在每个文件名前后加上“ ^”和“ $”。我很幸运,Nathan的文件列表是正确的。如果它是使用CR-LF结束行或其他空格进行DOS格式化的,则egrep不会保留任何文件,而所有文件都将被删除。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句