删除除以外的所有文件

时间:2011-09-05 07:48:23

标签: batch-file delete-file

我有一个包含几个文件的文件夹;我喜欢保持我的文件夹清除任何可能最终存在的杂散文件。这些迷路文件可能包括自动生成的备份文件或日志文件,但可能很简单,因为有人意外保存到错误的文件夹(我的文件夹)。

如果我能创建一个只保留大量指定文件(按名称和位置)但删除“list”上没有的任何内容的批处理文件,那么我必须知道所有这些。

2 个答案:

答案 0 :(得分:2)

[edit]很抱歉,当我第一次看到问题时,我看到了bash而不是batch。我没有删除不那么有用的答案,因为在评论中指出可以用cygwin完成。

您可以列出文件,排除要保留的文件,并将其提交给rm。

如果所有文件都在一个目录中:

ls | grep -v -f ~/.list_of_files_to_exclude | xargs rm

或目录树

find . | grep -v -f ~/.list_of_files_to_exclude | xargs rm

其中~/.list_of_files_to_exclude是一个文件,其中包含要排除的模式列表(每行一个)

在测试之前,请制作备份副本并用rm替换echo以查看输出是否真的符合您的要求。

答案 1 :(得分:1)

文件生存的白名单是一个非常危险的概念。我强烈建议重新思考。

如果您必须这样做,我可以建议您实际执行它:

  • 所有文件移至备份区域(每次运行创建一个,例如包含当前日期和时间的目录)。
  • 使用您的白名单复制您想要保留的文件,例如copy c:\backups\2011_04_07_11_52_04\*.cpp c:\original_dir)。

这样,你保留了所有非白名单的文件以防你搞砸了(你在某个时候,相信我)你不必担心负面的逻辑在批处理文件中(删除所有 all 这些类型的文件),而不是使用更简单的选项(移回每个每个类型的文件)。 / p>