bash - 最新バージョンのディレクトリを維持する

bash - 最新バージョンのディレクトリを維持する

私の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 -n12番目の最新のフォルダが提供されます。

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見つかったディレクトリを削除します。

おすすめ記事