如果目录中有多个文件,则查找并删除最旧的文件
时间:2020-03-21 11:43:35 来源:igfitidea点击:
如果目录中有多个文件,则查找并删除最旧的文件
让我们说,如果目录中有超过10个文件,我们想找到并删除最旧的文件。
让我们检查此目录中使用命令的文件:
$find theitroad/-type f | wc -l
或者CD进入该目录并运行:
$ls | wc -l
示例输出:
33
正如我们在上面的示例中看到的,OniToad目录包含33个文件。
我不想要此目录中的33个文件。
我想删除所有最旧的文件并保持10个文件。
现在,如果它包含超过10个文件,请在此目录中找到并删除最旧的文件。
为此,请转到该目录:
$cd theitroad
并且,运行以下命令:
$ls -1t | tail -n +11 | xargs rm
或者,
$ls -1t | tail -n +11 | xargs rm -f
其中:
- LS:列出目录内容。
- -1t:1(第一个)表示LS的输出应该是每行一个文件。 t表示通过修改时间对内容进行排序,首先是最新的。
- tail:输出文件的最后一部分。
- -n +11:输出最后一个数字,而不是最后10个;或者使用-n + num以以行num开始的输出
- XARGS:从标准输入构建和执行命令行。
- RM -F:删除文件或者目录。 f表示Ignore不存在的文件和参数,切勿提示。这意味着如果少于10个文件,则此命令不会显示任何错误消息。
- | - 这是一个管道。这通常是一个由一个控制运算符分隔的一个或者多个命令的序列或者|&。
因此,如果当前工作目录中有超过10个文件,则上述命令将删除最旧的文件。
删除最旧的文件后,验证目录中的文件在目录中,刚刚运行:
$ls | wc -l
如果文件名包含空格,则上述命令将无法正常工作。
因为,Xargs命令用空格字符(标签,空格,新行)作为分隔符。
在这种情况下,我们只能为新的行字符('\ n')缩小它,如下面的-d选项:
$ls -1t | tail -n +11 | xargs -d '\n' rm -f