Shell-Script
如何為子目錄遞歸執行 ZSH glob 命令
我有一個 ZSH glob 命令,可以刪除文件夾中除最新的 10 個目錄之外的任何內容。
#! /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
所以我不太確定如何做到這一點。
cd
只接受一個論點。一種方法是進入每個目錄(儘管沒有必要,但如果目錄都是完全限定的(也就是說,目錄不是相對的),則cd
使用子 shell )for d in /path/to/backups/*; do ( cd $d && rm -rf ./*(om[1,-11]) ) done
另一種方法是直接刪除文件(此處
print -l /path/to/backups/pod*/*(Om[1,-11])
但是,如果匹配的文件太多,這可能會遇到 shell 限制,在這種情況下,或者可能需要
xargs
ZSH 。zargs