だから私はこれのいくつかを自分で見つけることができましたが、それをすべて一つにまとめることは困難でした。自動化する必要がある作業があります。フォルダにはギガバイト単位の古いファイルがいっぱいですが、2つの条件を満たしている場合はそのファイルを削除したいと思います。
- ファイルは過去14日間に変更されたことはありません。そのために私はfindを使います。
find /dir/* -type f -mtime +14
- ファイルが利用できない場合は、次のように確認できます。
lsof /dir/*
私はこれらのコマンドを組み合わせる方法を理解するのに十分なbashをまだ知りません。どんな助けでも大変感謝します。私は本質的にfind出力の各行を繰り返してlsof出力にあることを確認し、そうでない場合はrm -fを実行したいと思います。しかし、目標を達成すると、選択肢が開いています!
ベストアンサー1
次は動作します。
for x in `find <dir> -type f -mtime +14`; do lsof "$x" >/dev/null && echo "$x in use" || echo "$x not in use" ; done
echo "$x not in use"
コマンドの代わりにコマンドを入力できますrm "$x"
。
仕組み:
- 最後に変更されてから14日以上経過したファイルを探す:
find <dir> -type f -mtime +14
- リスト内の項目を繰り返します。
for x in <list>; do <command>; done
lsof
結果が次の場合はコマンド2を実行し0
、そうでない場合はコマンド1を実行します。
lsof "$x" && <command 1> || <command 2>
これは次のように異なります。怠惰な評価Bash はコマンド 1 またはコマンド 2 を実行します。
マイシステム(Ubuntu 14.04)では、スペースを含むファイル名と?
スペースを含むファイル名にも機能します。しかし、これがすべてのシステムのすべてのシェルで動作することを保証するわけではありません。コマンドをコマンドに置き換える前にテストしてください。*
echo
rm