删除早于特定文件的文件


14

我需要从文件夹中删除所有早于特定文件的文件。
在CentOS 7上运行bash。

我对此有一个解决方案,但我认为应该有一种更优雅的方法:

reference_file=/my/reference/file

get_modify_time()
{
    stat $1 | grep -Po "Modify: \K[0-9- :]*"
}

pit=$(get_modify_time $reference_file)
for f in /folder/0000* ; do [[ "$pit" > "$(get_modify_time $f)" ]] && rm $f ; done

Answers:


28

我还没有尝试过,但是find应该能够处理整个操作:

$ find dir/ -type f ! -newer reference -delete

... 要么...

$ find dir/ -type f ! -newer reference ! -name reference -delete

基本上:

  • ! -newer reference匹配最近修改的文件reference
  • -delete 删除它们。
  • ! -name reference排除reference,如果它也位于下面dir/并且您想要保留它。

这将删除所有早于reference和位于下的文件dir/


2
完美的:)。刚添加-maxdepth 1以保持搜索不递归
csny15年

3
! -newer表示“不较新”,因此“较老或相同年龄 ”;如果文件位于路径find中,则文件本身将被匹配,请牢记。
法拉达

1
@ferada如果您将其排除,则不会,这就是为什么我的答案也包括在内! -name reference(请参阅第三个项目符号)。
约翰·史密斯

7

test使用-nt(大于)和-ot(大于)运算符将文件的修改时间与进行比较:

if [ "$file1" -ot "$file2" ]; then
    #do whatever you want;
fi

2
谢谢,这比我的解决方案要好,但是您仍然需要迭代文件夹中的所有文件并进行比较...另一个答案更加优雅
csny
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.