从 Unix 中的文件夹中删除除少数文件之外的所有文件

从 Unix 中的文件夹中删除除少数文件之外的所有文件

可能重复:
如何删除目录中除部分文件之外的所有文件?

我经常遇到这个问题。文件夹中有一组文件,我想删除其中所有文件,只留下其中几个。

例如:我有按创建日期命名的文件(如 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!它们可能非常危险:)。

相关内容