从目录中的子目录中删除最旧的文件

时间:2017-09-28 05:17:33

标签: bash shell

我有一个存档文件夹,里面有一些包含存档文件的子文件夹(如A,B,C)。如何查找和删除我想要的子文件夹(比方说B)中最早创建的文件?

2 个答案:

答案 0 :(得分:1)

此命令可以完全按照您的意愿执行,

find . -mindepth 2 -type f -printf '%T+ %p\n' | sort | awk 'NR==1{print $2}' | xargs rm -v

简要说明,

  • find . -mindepth 2 -type f -printf '%T+ %p\n':将最小深度限制为2,这意味着find只会显示子目录下的文件,甚至更远。然后打印文件的最后修改时间及其名称。
  • find ...的输出传输到sort,以对所有找到的文件的修改时间进行排序。
  • awk 'NR==1{print $2}':将输出传输到awk以获取最旧文件的名称
  • xargs rm -v:删除最旧的文件

<强> Eidt

对于使用变量传递子目录名称的进一步请求,这里是要使用的修改方法。您只需要修改awk部分,

$ a="sub_dir1"
$ b="sub_dir2"
$ find ... | sort | awk -v a=$a -v b=$b '$2 ~ "./" a "/" || $2 ~ "./" b "/"{print $2 ;exit}' | xargs ...

答案 1 :(得分:0)

如果您要删除最早修改的文件(未创建),则可以使用:

rm "$(ls -t | tail -1)"