パス内のいくつかのパターンに基づいていくつかのファイルを見つけたいのですが、そのパターンの最新の3つのファイルと、削除したい他のファイルだけを保持したいと思います。
zsh
の場合:
echo rm -f ./**/*pattern*(.Dom[4,-1])
**/
任意のレベルのサブディレクトリ(...)
他の基準で一致を修飾するためのglob修飾子:.
:通常のファイルのみD
:ドットファイル(隠しファイル)を含め、隠しファイルを調べますom
:変更時間による順序(新しいものから古いものへ)[4,-1]
:4からth 最後まで(最初の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)