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 definddos resultados. Fazer umfind … | while read filesimples funciona bem, mas apenas se os nomes dos arquivos retornados não contiverem uma nova linha. Parsinglsnunca é recomendado. -
find "$dir" -maxdepth 1 -type f | read fsó 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.