
古いファイルを削除しようとしていますが、最新の3日間のログファイルは保持する必要があります。以下のコマンドを試しました。
ls -tr /home/httpd/htdocs/パス名/パス名/config//ビルド/ログ/アプリ/.log | tail -n +4 | xargs rm --
しかし、すべてのファイルが削除され、1 つのフォルダーに 3 つのファイルのみが残ります。ただし、フォルダーごとに 3 つのファイルを個別に残しておきたいです。
誰かこの問題を解決するのを手伝ってくれませんか。
答え1
これを試すには、次の内容をシェル スクリプト ファイルに入力して実行します。
#!/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
: 変更時間の降順でファイルをリストします。1 行に 1 つのファイル名が表示されます。sed -e '1,3d'
: 最初の3行を削除しますxargs -d '\n' rm
: 各入力行(終了改行を除く)を引数として渡しますrm
。-d '\n'
: これは効率化のために必要であり、xargs が各入力行を個別の引数と見なし、同時にコマンドラインに収まるだけの数の引数を渡すようにして、各引数ごとに rm が再度呼び出されないようにします。
さらなる可能性については、投稿をご覧ください bashで最新のXファイル以外をすべて削除する。