cd
leva apenas um argumento. Uma abordagem é em vez de cd
em cada diretório (com um sub-shell, embora não seja necessário fornecido que os diretórios sejam totalmente qualificados (isto é, os diretórios não são relativos))
for d in /path/to/backups/*; do
( cd $d && rm -rf ./*(om[1,-11]) )
done
Outra abordagem é apenas excluir os arquivos diretamente (aqui com uma depuração print
para confirmar primeiro se os arquivos corretos foram correspondidos), já que vários globs podem ser especificados em uma expressão. Observe que isso mantém 10 arquivos no total, enquanto a solução baseada em loop mantém 10 arquivos em cada diretório.
print -l /path/to/backups/pod*/*(Om[1,-11])
No entanto, isso pode ocorrer nos limites do shell, pois muitos arquivos devem ser correspondidos. Nesse caso, xargs
ou o ZSH zargs
podem ser necessários.