Linux:删除早于某个日期的所有文件,但保留一个例外文件。

4

我可以通过以下方式删除一个文件夹中7天前的所有普通文件:

find /path/to/dir -type f -mtime +7 -exec rm {} \;

只有一个问题。这里有一个文件(.gitignore),我想保留它。我尝试使用正则表达式,但显然findutils正则表达式不支持负向先行断言(?!gitignore)

还有其他的想法吗?

1个回答

5

Use ! -name .gitignore

find /path/to/dir ! -name .gitignore -type f -mtime +7 -exec rm {} \;

你可以用转义括号将多个参数分组。例如,要删除除了.gitignore和javascript文件(以.js结尾)之外的所有文件:
find /path/to/dir ! \( -name ".gitignore" -o -name "*.js" \) -type f -mtime +7 -exec rm {} \;

-o 表示 或者


我认为需要转义 "!",否则 shell 可能会尝试适应先前的命令?即 \! 而不是 !?(不太确定 :/) - Olivier Dulac
“man find”提到需要转义“!”,但我从未遇到过这种情况。您运行上述命令时是否遇到了问题?上一个命令的shell命令是!! - grebneke
完美,对我来说没有转义也能正常工作! - kali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接