私は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
つまり、
find
30日を過ぎたファイルのみが検索されます。30
希望の番号に変更してください。ファイルの寿命を丸める特別な方法により、
find
「30日以上」という正確な期限が予想されるものと異なる場合があります。man find
詳細より。-exec sh -c 'mv -i "$1" "$1.old"' MV {} \;
これは、見つかった各ファイルに対してコマンドを実行することを意味します
find
。mv
この-i
オプションは、mv
既存のファイルを上書きする前に対話式に要求するように指示します。そのようなオプションがたくさんあります。man mv
詳細より。
GNUの検索または類似
find
GNUなどの一部のバージョンでは、find
上記の使用を不要にします(ヒント:sh
急ぐ):
find . -type f -mtime +30 -exec mv -i {} {}.old \;
これは必須ではありません。POSIXしたがって、携帯できない場合があります。