我正在尝试删除旧文件,但应该保留最近 3 天的日志文件。我尝试了以下命令,
ls -tr /home/httpd/htdocs/路径名/路径名/config//构建/日志/应用程序/.log | tail -n +4 | xargs rm --
但是所有文件都被删除了,只保留一个文件夹中的 3 个文件。但我想分别保留每个文件夹中的 3 个文件。
谁能帮我解决这个问题。
答案1
你可以尝试一下,将下面的内容放入一个shell脚本文件中并执行它。
#!/bin/bash
dirs=($(find /tmp/test -type d))
for dir in "${dirs[@]}"; do
cd "$dir"
ls -pt | grep -v / | tail -n +4 | xargs rm -f
done
替换/tmp/test
为您的目录名称。
答案2
你可以使用这个命令:
ls -t path | sed -e '1,3d' | xargs -d '\n' rm
或者循环:
for d in $(find path -type d); do
ls -t "$d" | sed -e '1,3d' | xargs -d '\n' rm
done
在哪里:
ls -t
:按修改时间的降序列出文件,每行一个文件名。sed -e '1,3d'
:删除前 3 行xargs -d '\n' rm
:对于每个输入行(不包含终止换行符),将其作为参数传递给rm
。-d '\n'
:这是出于效率的考虑,使得 xargs 将每一行输入视为一个单独的参数,但同时传递命令行上尽可能多的参数,因此 rm 不会为每个参数重新调用。
更多可能性,请参阅文章 删除 bash 中除最近的 X 文件之外的所有文件。