删除随机创建的特定子目录中的文件
Deleting files in specific sub-directories created at random
我想创建一个脚本,用于从一组特定的子文件夹中删除超过 5 天的文件。我知道以下命令:
find /path/to/files* -mtime +5 -exec rm {} \;
我现在面临的问题需要对我的文件夹结构进行一些澄清:
/cassandra/data/data/cpms/basket/snapshots
/cassandra/data/data/customer/customer/snapshots
/cassandra/data/data/profile/customer/snapshots
我希望我的脚本只查看快照文件夹并只从那里清除文件,问题是在任何时候,应用程序都可以在 'data' 目录下或在当前存在的目录。即
/cassandra/data/data/cpms/new_basket/snapshots
或
/cassandra/data/data/new_category/new_folder/snapshots
因此,一旦应用程序创建新结构,硬编码目录将变得无关紧要,在我更新代码之前,它不会再有效地工作。
有没有办法执行这样的命令:
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 目录,找到所有名为 'snapshots' 的文件夹,然后只删除这些文件夹中的文件。
假设您位于要开始搜索快照文件夹的顶级目录中(注意 - 将您的“-mtime 5 -exec rm”替换为 -ls,以便您可以验证它是否正确找到了文件夹):
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 {} \;
我想创建一个脚本,用于从一组特定的子文件夹中删除超过 5 天的文件。我知道以下命令:
find /path/to/files* -mtime +5 -exec rm {} \;
我现在面临的问题需要对我的文件夹结构进行一些澄清:
/cassandra/data/data/cpms/basket/snapshots
/cassandra/data/data/customer/customer/snapshots
/cassandra/data/data/profile/customer/snapshots
我希望我的脚本只查看快照文件夹并只从那里清除文件,问题是在任何时候,应用程序都可以在 'data' 目录下或在当前存在的目录。即
/cassandra/data/data/cpms/new_basket/snapshots
或
/cassandra/data/data/new_category/new_folder/snapshots
因此,一旦应用程序创建新结构,硬编码目录将变得无关紧要,在我更新代码之前,它不会再有效地工作。
有没有办法执行这样的命令:
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 目录,找到所有名为 'snapshots' 的文件夹,然后只删除这些文件夹中的文件。
假设您位于要开始搜索快照文件夹的顶级目录中(注意 - 将您的“-mtime 5 -exec rm”替换为 -ls,以便您可以验证它是否正确找到了文件夹):
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 {} \;