フォルダ内の最新の10個のディレクトリを除くすべてのディレクトリを削除するZSH globコマンドがあります。
#! /bin/zsh
cd /path/to/backups/pod1 && rm -rf ./*(Om[1,-11])
ただし、これはpod1ディレクトリに制限されています。同じレベルに多くのバックアップディレクトリ(例:pod1、pod2、pod3など)があります。理想的には、次のワイルドカードを使用したいと思います。
cd /path/to/backups/* && rm -rf ./*(Om[1,-11])
...上記のように、バックアップのサブディレクトリからglobコマンドを実行します。
ただし、実行すると、次のメッセージが表示されます。
cd: too many arguments
だから私は何をすべきかわかりません。
ベストアンサー1
cd
1つのパラメータのみが許可されます。 1つの方法はcd
各ディレクトリに移動することです(必須ではありませんが、サブシェルを使用する)。もしこれらのディレクトリは正規化されたディレクトリです(つまり、ディレクトリは相対的ではありません)。
for d in /path/to/backups/*; do
( cd $d && rm -rf ./*(om[1,-11]) )
done
代わりに、ファイルを直接削除することです(ここでデバッグして正しいprint
ファイルが一致することを最初に確認してください)。式に複数のglobを指定できるからです。これは合計10個のファイルを保持しますが、ループベースのソリューションは各ディレクトリに10個のファイルを保持します。
print -l /path/to/backups/pod*/*(Om[1,-11])
ただし、一致するファイルが多すぎると、シェルの制限に遭遇する可能性があり、その場合はxargs
ZSHが必要になることがあります。zargs