Não há motivos para fazer um dos erros abaixo para esta situação:
- Use extensões GNU não portáteis (como
xargs -0
) - Analise os nomes de arquivos apenas como um fluxo de texto, fingindo que eles não podem conter novas linhas.
Você pode lidar com isso de maneira portável sem muita dificuldade:
set -- */
while [ "$#" -gt 0 ]; do
case "$#" in
1)
my-command "$1"
shift 1
;;
2)
my-command "$1" "$2"
shift 2
;;
*)
my-command "$1" "$2" "$3"
shift 3
;;
esac
done
Realmente isso é mais detalhado do que o necessário, mas é legível dessa maneira.
Para um tipo diferente de particionamento, onde você quer dividir todos os diretórios em exatamente três diferentes métodos de manuseio (mas não precisa lidar com eles ao mesmo tempo), você pode fazer da seguinte forma:
x=1
for d in *; do
[ ! -d "$d" ] && continue
case "$x" in
1)
# do stuff with "$d"
;;
2)
# do stuff with "$d"
;;
3)
# do stuff with "$d"
;;
esac
x=$(($x+1))
[ "$x" -eq 4 ] && x=1
done