我正在编写一个 shell 脚本来删除目录中的旧文件(超过 60 天),除了少数文件之外,这些文件名保存在另一个目录中存在的异常文件中。
我知道以下命令适用于一个异常文件,但我需要检查异常文件列表
find . ! -name 'file.txt' -type f -exec rm -f {} +
答案1
假设您的文件具有正常的名称(即它们没有嵌入换行符),类似这样的事情应该可以工作:
find . -mtime +60 | fgrep -v -x -f exceptions.txt | xargs -d '\n' rm -f
首先替换rm -f
为ls -1
进行空运行。完全按照find
in打印的方式放置路径exceptions.txt
。
答案2
我认为没有find
这样的选项,您可以使用printf
排除列表构建命令:
find . -name "*.txt" $(printf "! -name %s " $(cat file.txt)) -mtime +60 -exec rm -f {} +
file.txt
find
将有要在命令中排除的文件列表。