计算文件然后删除最旧文件的脚本
Contents
1. 概述
在本教程中,我们将创建一个 bash 脚本来计算目录中的文件,如果文件多于特定数量,它将删除最旧的文件。
2. 环境
假设我们有一个目录,里面有几个文件:
$ ls
files
$ ls -t ./files
file15.txt file13.txt file11.txt file9.txt file7.txt file5.txt file3.txt file1.txt
file14.txt file12.txt file10.txt file8.txt file6.txt file4.txt file2.txt
-t选项按修改时间对报告的文件进行排序,因此最先显示最新的文件。我们可以看到,file15.txt是最新的文件,file1.txt是最旧的文件。
3. 脚本
现在,让我们创建脚本。它应该接收文件数量的限制作为参数:
#!/bin/bash
# Print usage if requested.
if [[ $1 == "--help" || $1 == "-h" ]]
then
echo "Usage: $0 [files limit]"
exit 0
fi
# The script receives the limit as an argument.
limit=$1
number_of_files=$(ls ./files | wc -l)
if [ $number_of_files -gt $limit ]
then
# There are more files than the limit
# So we need to remove the older ones.
cd files
ls -t | tail --lines=+$(expr $limit + 1) | xargs -d '\n' rm
fi
在上面的代码中, wc -l使用换行符*\n作为分隔符来计算./files*中的文件 。
ls -t按修改时间列出文件并将最新的文件放在最前面。
*tail –lines=+$(expr $limit + 1)*输出紧接在限制之后的文件。因此,我们现在拥有需要删除的所有文件。 最后,xargs -d ‘\n’使用换行符作为分隔符,将每个文件作为参数提供给rm ,以便将它们删除。
4. 执行脚本
保存脚本后,我们需要使其可执行才能执行它:
$ ls
count_then_remove.sh files
$ chmod u+x count_then_remove.sh
chmod u+x使脚本可执行。让我们运行它:
$ ./count_then_remove.sh 5
$ ls -t ./files
file15.txt file14.txt file13.txt file12.txt file11.txt
我们可以看到脚本已经删除了旧文件。结果,剩下五个文件。