以下では最新の 10 個のディレクトリを維持し、残りは削除します。 bashでうまく動作します。
TCSHは以下のbashと同じですか?
keep = 10
rm -r $(ls -dt */ | tail -n +$((keep+1)))
答え1
set keep = 10
@ tail = $keep + 1
rm -rf -- "`ls -dt -- */ | tail -n +$tail`"
ディレクトリ名(またはディレクトリへのシンボリックリンク)に改行文字が含まれている場合にのみ失敗しますが、欠陥のあるbashコードよりもはるかに安定しています。
Kusalanandaがコメントで述べたように、zshはより適切なシェルになります。
keep=10
rm -rf -- *(/om[keep+1,-1])
いずれにせよ、ディレクトリの変更時間は、そのエントリが最後に追加、削除、または名前が変更された時間(サブディレクトリではない)のみを反映するため、そのディレクトリ内のデータの寿命を測定するものではなく、通常は変更しないでください。削除基準として使用されます。