Outra solução ligeiramente diferente:
#!/bin/bash
find toplevel/comics -type d -not -empty -print0 | while IFS= read -r -d '' dir; do
if find "$dir" -maxdepth 1 -type f | read f; then
zip toplevel/cbz/"$(basename "$dir").cbz" "$dir"/*
fi
done
-
find … -print0 | while IFS= read -r -d '' file
é um padrão recomendado para iterar mais defind
dos resultados. Fazer umfind … | while read file
simples funciona bem, mas apenas se os nomes dos arquivos retornados não contiverem uma nova linha. Parsingls
nunca é recomendado. -
find "$dir" -maxdepth 1 -type f | read f
só avalia true se forem encontrados arquivos no diretório. Ele atinge o mesmo objetivo da avaliação do @ terdon sobre o número de linhas geradas porfind
. -
As cotações são necessárias em torno de todas as variáveis para evitar que os espaços em branco nos nomes dos arquivos quebrem os argumentos.