我是shell脚本的新手,所以我需要一些帮助.我有一个填满备份的目录.如果我有超过10个备份文件,我想删除最旧的文件,以便剩下10个最新的备份文件.
到目前为止,我知道如何计算文件,这似乎很容易,但如果计数超过10,我如何删除最旧的文件?
if [ls /backups | wc -l > 10]
then
echo "More than 10"
fi
Run Code Online (Sandbox Code Playgroud)
Dal*_*und 87
试试这个:
ls -t | sed -e '1,10d' | xargs -d '\n' rm
Run Code Online (Sandbox Code Playgroud)
这应该处理文件名中的所有字符(换行符除外).
这里发生了什么?
ls -t按修改时间的降序列出当前目录中的所有文件.即,最近修改的文件是第一个,每行一个文件名.sed -e '1,10d'删除前10行,即10个最新文件.我用这个而不是tail因为我永远不记得我是否需要tail -n +10或tail -n +11.xargs -d '\n' rm收集每个输入行(没有终止换行符)并将每行作为参数传递给rm.与此类任何东西一样,请在安全的地方进行实验.
mah*_*ard 23
find 是这类任务的常用工具:
find ./my_dir -mtime +10 -type f -delete
Run Code Online (Sandbox Code Playgroud)
说明
./my_dir 你的目录(用你自己的替换)-mtime +10 超过10天-type f 只有文件-delete没有惊喜.在执行整个命令之前删除它以测试find过滤器并注意./my_dir存在以避免不良意外!
小智 8
确保你的pwd是删除文件的正确目录(假设文件名中只有常规字符):
ls -A1t | tail -n +11 | xargs rm
Run Code Online (Sandbox Code Playgroud)
保留最新的10个文件.我用相机程序'motion'来保存最新的帧抓取文件.感谢所有正在进行的答案,因为您告诉我该怎么做.
| 归档时间: |
|
| 查看次数: |
50461 次 |
| 最近记录: |