2014-06-29 94 views
0

嗨所以我想,如果文件数量超过最大从一个子目录删除旧的备份文件,我发现这个命令来做到这一点在子目录删除文件

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

我的改变是因为显然如下

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

当我尝试运行脚本它给了我一个错误说未知命令:现在˚F

我唯一担心的是,我路过在允许的最大文件数量作为参数,所以我将它存储在f中,但现在我不太清楚如何在上面的命令中使用该变量,而不必将条件设置为特定的数字。

谁能给我任何指针?还有什么我做错了吗?

谢谢!

回答

2

问题标题显示“基于修改日期”。那么为什么不简单地使用mtime选项来查找?

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

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

+0

或'-delete'而不是'-exec rm -v {} \;' –

+0

如果我只想在达到最大文件数时删除最旧的文件,那么我在目录中添加一个文件时该怎么办?对不起,我没有把问题说得很清楚 – Mark

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命令,以保证路形成的文件列表:在一个线就可以用做信息被保留。