私のPythonアプリケーションは次の階層に格納されています。
PyCharmProjects/app/versions/v1
PyCharmProjects/app/versions/v2
PyCharmProjects/app/versions/v3
PyCharmProjects/app/versions/v4
PyCharmProjects/app/versions/v5
PyCharmProjects/app/versions/v6
最新の2つのバージョンに対応せず、7日後のすべてのディレクトリを削除するbashスクリプトをどのように作成できますか?
9日前に作成されたので、v4、v3、v2、v1を削除したいと思います。
正規表現を使用してこれを実行できますか?
PyCharm自体にこれを行う方法はありますか?
ベストアンサー1
find
! -path
次のコマンドを使用して、コマンドからパスを除外できます。これにより、v5 ディレクトリがルックアップから除外されます。
find directory/* ! -path directory/v5
複数のディレクトリを除外するには、! -path
以下のようにfindコマンドで同じ操作を繰り返します。これにより、v4 と v5 がルックアップから除外されます。
find directory/* ! -path directory/v4 ! -path directory/v5
あなたのシナリオでは、除外するフォルダ名がわかりません。したがって、ディレクトリを除外する代わりに、他の find コマンドを実装できます。
以下のコードは最新のフォルダを提供します。
find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions -type d -printf '%T@ %P\n' | sort -nr | head -n1 | awk '{print $2}'
-printf '%T@ %P\n'
タイムスタンプを含むフォルダが一覧表示されます。sort -nr
最新のフォルダが一番上になるようにソートが反転されます。head -n1
最新のフォルダを抽出します
2番目の最新フォルダの場合。
find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions -type d -printf '%T@ %P\n' | sort -nr | head -n2 | tail -n1 | awk '{print $2}'
head -n2
最新の2つのフォルダが用意されています。tail -n1
2番目の最新のフォルダが提供されます。
v4とv5の代わりに上記の2つのコードをそれぞれ実装します。
find PyCharmProjects/app/versions/* -maxdepth 1 ! -path PyCharmProjects/app/versions/`find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions -type d -printf '%T@ %P\n' | sort -nr | head -n2 | tail -n1 | awk '{print $2}'` ! -path PyCharmProjects/app/versions/`find PyCharmProjects/app/versions ! -path PyCharmProjects/app/versions -type d -printf '%T@ %P\n' | sort -nr | head -n2 | tail -n1 | awk '{print $2}'` -type d -mtime +7 -delete
! -path
除外パス-type -d
ディレクトリを探す-maxdepth 1
現在のディレクトリに-mtime +7
ディレクトリが7日前に修正されました。-delete
見つかったディレクトリを削除します。