删除随机创建的特定子目录中的文件

时间:2017-03-29 10:25:21

标签: linux bash find delete-file

我想创建一个脚本,从一组子文件夹中删除超过5天的文件。我知道以下命令:

find /path/to/files* -mtime +5 -exec rm {} \;

此时我遇到的问题需要澄清我文件夹的结构:

  

/卡桑德拉/数据/数据/的cpm /篮/快照
  /卡桑德拉/数据/数据/客户/客户/快照
  /卡桑德拉/数据/数据/配置文件/客户/快照

我希望我的脚本只能查看快照文件夹并仅从那里清除文件,问题是在任何时候,应用程序都可以在“数据”下创建一个新文件夹。目录,或在当前现有目录下。即。

  

/卡桑德拉/数据/数据/的cpm /的 new_basket /快照

OR

  

/卡桑德拉/数据/数据/的 new_category / new_folder /快照

因此,对于硬编码,一旦应用程序创建新结构,目录将无关紧要,它将不再有效地工作,直到我更新代码。

有没有办法做这样的命令:

find /cassandra/data/data <look in *this* directory for a folder named snapshots [it might still be 1 or 2 levels down] in the folders below data> & delete only files older than 5 days in snapshot folders found?

所以为了澄清[我希望],我的脚本应该进入/ cassandra / data / data目录,找到名为&#39; snapshots&#39;的所有文件夹。并删除这些文件夹中的文件。

1 个答案:

答案 0 :(得分:1)

假设您位于要开始搜索快照文件夹的顶级目录中(注意 - 仅使用-ls替换您的'-mtime 5 -exec rm',以便您可以验证它是否正确查找文件夹):

find . -name snapshot -a -type d | while read a ; do find "$a" -ls ; done

或者,甚至更容易:

find . -path '*/snapshot/*' -a -type f -a -mtime 5 -exec ls -l {} \;