可能重复:
如何删除目录中除部分文件之外的所有文件?
我经常遇到这个问题。文件夹中有一组文件,我想删除其中所有文件,只留下其中几个。
例如:我有按创建日期命名的文件(如 11-1-11.tar、10-1-11.tar 等)。现在我想删除 10-1-11、9-1-11 等文件,但不删除其他文件。基本上,我想强制删除所有文件以及保留所有文件。我该怎么做?
答案1
如果这是 BASH,您可以考虑使用扩展通配符。要启用:
shopt -s extglob
(如果您愿意的话,可以把它放进去.bashrc
,或者在需要的时候打开它。)
然后,例如删除所有文件除了文件名1 和 文件名2
rm !(filename1|filename2)
您也可以在其中使用像 * 这样的通配符。
或者你可以删除所有匹配模式的:
rm +([0-9])-+([0-9])-+([0-9]).tar
将删除所有 #-#-#.tar 文件(其中的数字有 1 位或多位数字)。
尚不清楚这是否能满足您的需求。更多详情这里。
答案2
如果文件名与文件的创建日期相对应,则删除某一天之前的文件可能会更容易。
使用 find 命令可以轻松实现:
查找 /home/john/files -type f -mtime +30 -delete
/home/john/files
这将删除修改日期超过 30 天的文件。
答案3
你也可以用 tmpwatch 做你想做的事
http://linux.about.com/library/cmd/blcmdl8_tmpwatch.htm
tmpwatch -m 24 /path/to/dir
将删除目录中自上次使用以来超过一天的所有文件(-m)。
答案4
我认为,您可以在一个管道中使用多个 UNIX 命令,这将解决您的问题。可能的解决方案之一是使用find | grep | xargs rm -rf
。例如:
$ find /path/to/directory/tree -type f | grep -v -E -f /path/to/exclude/file | xargs rm -rf
要排除某些文件,只需将其名称放入文件中/path/to/exclude/file
。例如:
very_useful_file.tar.gz
very_important_file.jpg
为了防止错误地擦除重要文件,我建议备份所有文件。使用 xargs-p
选项也很有用,它...Prompt the user about whether to run each command line and read a line from the terminal.
可以使用find
不带 grep/xargs 的工具。它将是这样的:
find /path/to/tree -type f ! -name "exlude_pattern"
在使用这些命令之前,请仔细阅读手册页find/grep/xargs
!它们可能非常危险:)。