ソートした後、削除するコマンド出力を見つけます。

ソートした後、削除するコマンド出力を見つけます。

パスの特定のパターンに基づいていくつかのファイルを見つけたいと思います。その後、そのパターンの最新の3つのファイルと削除したい他のファイルだけを保持したいと思います。

ベストアンサー1

そしてzsh

echo rm -f ./**/*pattern*(.Dom[4,-1])
  • **/あらゆるレベルのサブディレクトリ
  • (...)glob修飾子は、異なる基準に基づいて一致を制限します。
  • .:一般ファイルのみ
  • D:ドットファイル(隠しファイル)を含み、隠しディレクトリを表示します。
  • om:修正時間に基づいて並べ替え(最新の項目から古い項目の順)
  • [4,-1]:4番目から最後まで(したがって最初の3つは省略)

echo(実際の実行のために削除されました)

POSIXシェルとそれに対応するGNUユーティリティを使用するには、次の手順を実行します。

(export LC_ALL=C
find . -name '*pattern*' -type f -printf '%T@/%p\0' |
  sort -zrn |
  tail -zn +4 |
  cut -zd/ -f2- |
  xargs -r0 echo rm -f)

echo(実際の実行のために削除されました)

以前のバージョンのGNUユーティリティでは、次のことが必要になる場合があります。

(export LC_ALL=C
find . -name '*pattern*' -type f -printf '%T@/%p\0' |
  tr '\n\0' '\0\n' |
  sort -rn |
  tail -n +4 |
  cut -d/ -f2- |
  tr '\n\0' '\0\n' |
  xargs -r0 echo rm -f)

おすすめ記事