2

たくさんのファイルを含むディレクトリがあります。最新の6つだけを保持したい。それらの作成日を見て、古すぎるものすべてに対して rm を実行できると思いますが、これを行うためのより良い方法はありますか? たぶん、私が使用できるLinuxコマンドですか?

ありがとう!

:)

4

2 に答える 2

5
rm -v $(ls -t mysvc-*.log | tail -n +7)
  • ls -t、時間でソートされたリスト
  • tail -n +7、ここで+7はlength-7を意味するため、最初の 7 行を除くすべて
  • $()同封のコマンド出力から文字列のリストを作成します
  • rmもちろん、ファイルを削除するには
  • Beware files with space in their names, $() splits on any white-space!
于 2013-02-22T08:19:38.073 に答える
0

これがスクリプトとしての私の見解です。ちょっとしたハックであっても、ファイル名のスペースを処理します。

#!/bin/bash

eval set -- $(ls -t1  | sed -e 's/.*/"&"/')

if [[ $# -gt 6 ]] ; then
    shift 6
    while [[ $# -gt 0 ]] ; do
        echo "remove this file: $1" # rm "$1"
        shift
    done
fi

そこに ls するための 2 番目のオプションは、1 行に 1 つのファイル名を表す "one" です。ただし、ls が tty にフィードしていない場合はデフォルトのように見えるため、実際には問題ではないようです。

于 2013-02-22T16:18:02.867 に答える