删除早于特定文件的文件

删除早于特定文件的文件

我需要从文件夹中删除早于特定文件的所有文件。
在 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

答案1

我还没有尝试过,但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

test使用-nt(新于)和-ot(旧于)运算符比较文件修改时间:

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

相关内容