4

私のフォルダーには、このファイルが作成されたときの日付をサフィックスとするファイルがあります。 20 ? これを毎日行う方法は知っていますがmv file.log2012-08-19 /old/、いつ停止するかわかりません...これを簡単に行うためのコマンド mv のパラメーターはありますか?

4

4 に答える 4

12

findパラメータで使用でき-mtimeます。これは、上記のファイル サフィックスがファイルの日付スタンプと一致することを前提としています。

  • -mtime +11 日以上経過したファイルを検索することを意味します
  • -mtime -11 日未満のファイルを検索することを意味します
  • -mtime 11 日前のファイルを検索することを意味します

例(更新):

find . -type f -mtime +1 -name "file.log*" -exec mv {} /old/ \;

またはfind、現在のディレクトリに追加するだけの-maxdepth 1場合(そうでない場合は、再帰的に検索されます):

find . -maxdepth 1 -type f -mtime +1 -name "file.log*" -exec mv {} /old/ \;
于 2012-08-21T13:31:23.350 に答える
1

最後の行が書き込まれた後、ログファイルが変更されていないと仮定します。

find . ! -newer file.log2012-08-20 | xargs -r -IX mv X /old/

注:このコマンドを使用すると、file.log2012-08-20も移動されます。不要な場合は、前のファイルを使用してください。

find . ! -newer file.log2012-08-19 | xargs -r -IX mv X /old/
于 2012-08-21T13:37:03.757 に答える
0

これには、小さなスクリプトを作成する必要がある場合があります。すべてのファイルが のような特定の命名規則に従っている場合file.log2012-08-21、このようなものが機能します。

since=$(date --date="2012-08-20" +%s)
for file in `ls -1 --color=none`
do
    date=$(date --date="${file#file.log}" +%s)
    [ $date -lt $since ] && mv -v $file /old/
done

実際にこれを行う前に、mv コマンドを echo に変更して、移動しようとしているファイルが正しいかどうかを確認することをお勧めします。

于 2012-08-21T13:34:04.347 に答える
-1

ls -l | awk '{print $NF}' | awk 'substr($0, length($0)-9, length($0)) < "2012-08-20" {system("mv "$0" /old/")}'

これにより、「2012-08-20」より古いすべてのファイルが「/old」フォルダーに移動されます。同様に、「2012-08-20」を変更して、必要な特定の日付を指定できます。これは、ファイルのサフィックスが日付スタンプであることを前提としていますが、プレフィックスは任意の名前にすることができます。

特定の日より古いファイルを移動する必要がある場合は、 rkyser の回答の方が適していると思います。

于 2012-08-21T13:40:57.917 に答える