我每次(重新)启动时都会将 .mozilla 备份到文件夹 ~/nas-backups/mozilla 中,但我只想按字母顺序保留最近的 10 个文件夹。备份以日期戳的形式存储,例如 .mozilla_2018_11_05_08:13
我想通过脚本删除除最近的 10 个文件之外的所有文件,但由于它们是隐藏文件,所以我找不到方法来实现:
rm -R 'ls -t | tail -n +11' 因为它会忽略隐藏的文件/文件夹。
我尝试过 rm -R 'ls -ta | tail -n +11' 但是它也不起作用。
如果它可以扩展,以便只保留每天的第一个备份,那将是一个好处。
我可以请求您对任何建议做出解释吗?谢谢。
请问有什么帮助吗?
答案1
不适用于包含空格或换行符的名称。
在您的情况下,名称类似于“ .mozilla_2018_11_05_08:13 ”。
我推测主文件夹 ~/nas-backups/mozilla 中没有其他文件或文件夹
发布前已测试:
cd ~/nas-backups/mozilla total=$(ls -1A|wc -l); remove=$((total - 10)); rm -rv $(ls -1vA|head -n $remove)
解釋
total=$(ls -1A|wc -l) #total number of folders
remove=$((total - 10)) #total -10 so that 10 folders are not removed
rm -rv $(ls -1vA|head -n $remove) # removes total -10 from top(head)
# because older folders(by name) are first in ls -1vA (v switch lists the names
# proper numeric order.
ls --help
-v 对文本中的(版本)数字进行自然排序
例子:
:~/nas-backups/mozilla$ ls -1vA
.mozilla_2019_01_09_01:16
.mozilla_2019_01_09_18:12
.mozilla_2019_01_09_18:16
.mozilla_2019_01_09_19:16
.mozilla_2019_01_09_20:16
.mozilla_2019_01_10_01:16
.mozilla_2019_01_10_18:12
.mozilla_2019_01_10_18:16
.mozilla_2019_01_10_19:16
.mozilla_2019_01_10_20:16
.mozilla_2019_02_09_02:16
.mozilla_2019_02_09_18:12
.mozilla_2019_02_09_18:16
.mozilla_2019_02_09_19:16
.mozilla_2019_02_09_20:16
.mozilla_2019_03_09_03:16
.mozilla_2019_03_09_18:12
.mozilla_2019_03_09_18:16
.mozilla_2019_03_09_19:16
.mozilla_2019_03_09_20:16
.mozilla_2019_03_10_03:16
.mozilla_2019_03_10_18:12
.mozilla_2019_03_10_18:16
.mozilla_2019_03_10_19:16
.mozilla_2019_03_10_20:16
:~/nas-backups/mozilla$ total=$(ls -1A|wc -l); remove=$((total - 10)); rm -rv $(ls -1vA|head -n $remove)
removed directory '.mozilla_2019_01_09_01:16'
removed directory '.mozilla_2019_01_09_18:12'
removed directory '.mozilla_2019_01_09_18:16'
removed directory '.mozilla_2019_01_09_19:16'
removed directory '.mozilla_2019_01_09_20:16'
removed directory '.mozilla_2019_01_10_01:16'
removed directory '.mozilla_2019_01_10_18:12'
removed directory '.mozilla_2019_01_10_18:16'
removed directory '.mozilla_2019_01_10_19:16'
removed directory '.mozilla_2019_01_10_20:16'
removed directory '.mozilla_2019_02_09_02:16'
removed directory '.mozilla_2019_02_09_18:12'
removed directory '.mozilla_2019_02_09_18:16'
removed directory '.mozilla_2019_02_09_19:16'
removed directory '.mozilla_2019_02_09_20:16'
答案2
尝试这个:
ls -tA|tail -n +11|xargs rm -R
这将通过一行简单的命令删除除最新的 10 个文件或文件夹(按文件修改时间)之外的所有文件或文件夹。
ls -tA
列出所有文件,包括隐藏文件,但不包括.
和..
特殊文件,按修改时间排序(最新的在前)。
tail -n +11
然后仅获取从第 11 个条目开始的文件(即,除最新的 10 个之外的所有文件)。
xargs
只获取 tail 的输出并将其用作 rm 的参数(对 tail 中的每一行执行一次 rm)。对于不能使用简单管道的命令很有用。