我想创建一个脚本,从一组子文件夹中删除超过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;的所有文件夹。并删除这些文件夹中的文件。
答案 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 {} \;