linux - 删除目录中的所有文件,除了列出的符合特定条件的文件

标签 linux bash delete-file rm

我需要自动清理仅保存备份文件的基于 Linux 的 FTP 服务器。

在我们的“\var\DATA”目录中是一个目录集合。这里用于备份的任何目录都以“DEV”开头。每个“DEVxxx*”目录中都是实际的备份文件,以及在这些设备的维护过程中可能需要的任何用户文件。

我们只想保留以下文件 - 在这些“DEVxxx*”目录中找到的任何其他文件都将被删除:

The newest two backups:  ls -t1 | grep -m2 ^[[:digit:]{6}_Config]  
The newest backup done on the first of the month:  ls -t1 | grep -m1 ^[[:digit:]{4}01_Config] 
Any file that was modified less than 30 days ago:  find -mtime -30  
Our good configuration file:  ls verification_cfg

任何与上述内容不符的内容都应删除。

我们如何编写这个脚本?

我猜 BASH 脚本可以做到这一点,并且我们可以创建一个 cron 作业每天运行来执行该任务。

最佳答案

也许是这样的?

{ ls -t1 | grep -m2 ^[[:digit:]{6}_Config] ;
  ls -t1 | grep -m1 ^[[:digit:]{4}01_Config] ;
  find -mtime -30 ;
  ls -1 verification_cfg ;
} | rsync -a --exclude=* --include-from=- /var/DATA/ /var/DATA.bak/
rm -rf /var/DATA
mv /var/DATA.bak /var/DATA

关于linux - 删除目录中的所有文件,除了列出的符合特定条件的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12458131/

相关文章:

c - 执行栈上的代码

bash - 直接从 curl 执行二进制文件

bash - 如何在 Bash 中抛出错误?

c# - 删除的文件还存在吗?

linux - 匹配以特定字母开头并排除某些单词的行

xml - 使用 libxml2 更改节点值的最佳方法

linux - 如何将循环参数插入字符串的中间?

linux - 用于检查进程并在未找到时重新启动程序的脚本

linux - 从 Linux 中删除 .deleted 条目

file - 如何自动将文件删除到ubuntu中的文件夹?