根据修改日期删除子目录中的文件

时间:2014-06-29 02:34:54

标签: linux bash shell ls

大家好我正试图从子目录中删除旧的备份文件,如果文件数超过最大值,我发现这个命令就是这样做

ls -t | sed -e '1,10d' | xargs -d '\n' rm

我的更改如下

ls -t subdirectory | sed -e '1,$f' | xargs -d '\n' rm

显然,当我尝试运行脚本时,它会给出一个错误,说明未知命令:f

我现在唯一关心的是我传入允许作为参数的最大文件数,所以我将其存储在f中但现在我不太确定如何在上面的命令中使用该变量必须将条件设置为特定数字。

任何人都可以给我任何指示吗?还有什么我做错了吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

您问题的标题是“基于修改日期”。那么为什么不简单地使用find和mtime选项呢?

find subdirectory -mtime +5d -exec rm -v {} \;

将删除超过5天的所有文件。

答案 1 :(得分:0)

问题是您传递给xargs的文件列表包含删除文件所需的路径信息。从当前目录调用时,不需要路径,但如果使用子目录调用它,则需要从当前目录中调用subdirectory/file。试试吧:

ls -t subdirectory  # returns files with no path info

您需要做的是更改到子目录,调用删除脚本,然后更改回来。在一行中可以完成:

pushd subdirectory &>/dev/null; ls -t | sed -e '1,$f' | xargs -d '\n' rm; popd

除了以类似方式执行此操作之外,您可能更好地编写一个稍长且更灵活的脚本,使用find命令形成文件列表,以确保保留路径信息。

相关问题