ファイルの寿命を確認して名前を変更するシェルスクリプト

ファイルの寿命を確認して名前を変更するシェルスクリプト

私はLinuxを初めて使用しており、現在指定されているディレクトリにファイルが含まれているすべてのファイルを確認して名前を変更するシェルスクリプトを作成したいと思います。例:

/home/foo/oldfile.txt
2019-01-01

入力する

/home/foo/oldfile.txt.old

どうすればいいですか?

ベストアンサー1

日付(この例ではN = 30)より古いファイルの名前を変更するには、次のようにします。

find . -type f -mtime +30 -exec sh -c 'mv -i "$1" "$1.old"' MV {} \;

上記のコマンドは、現在のディレクトリから再帰的に検索します。サブディレクトリにドロップダウンしたくない場合は、次を使用してください。

find . -maxdepth 1 -type f -mtime +3 -exec sh -c 'mv -i "$1" "$1.old"' MV {} \;

安全のために、まずこのコマンドを試して、結果が気に入ったら、次のものを削除することをお勧めしますecho

find . -maxdepth 1 -type f -mtime +3 -exec sh -c 'echo mv -i "$1" "$1.old"' MV {} \;

どのように動作しますか?

  • find .

    findこれにより、現在のディレクトリからコマンドが開始されます.

  • -type f

    これはfind通常のファイルのみを見つけるように指示します。

  • -mtime +30

    つまり、find30日を過ぎたファイルのみが検索されます。30希望の番号に変更してください。

    ファイルの寿命を丸める特別な方法により、find「30日以上」という正確な期限が予想されるものと異なる場合があります。man find詳細より。

  • -exec sh -c 'mv -i "$1" "$1.old"' MV {} \;

    これは、見つかった各ファイルに対してコマンドを実行することを意味しますfindmvこの-iオプションは、mv既存のファイルを上書きする前に対話式に要求するように指示します。そのようなオプションがたくさんあります。man mv詳細より。

GNUの検索または類似

findGNUなどの一部のバージョンでは、find上記の使用を不要にします(ヒント:sh急ぐ):

find . -type f -mtime +30 -exec mv -i {} {}.old \;

これは必須ではありません。POSIXしたがって、携帯できない場合があります。

おすすめ記事