![删除目录中的旧文件,例外文件中存在的文件除外](https://linux22.com/image/89474/%E5%88%A0%E9%99%A4%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%97%A7%E6%96%87%E4%BB%B6%EF%BC%8C%E4%BE%8B%E5%A4%96%E6%96%87%E4%BB%B6%E4%B8%AD%E5%AD%98%E5%9C%A8%E7%9A%84%E6%96%87%E4%BB%B6%E9%99%A4%E5%A4%96.png)
我正在编写一个 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
将有要在命令中排除的文件列表。