Este script irá arquivar então, opcionalmente, remover todas as pastas que contenham arquivos "* .txt" e nada mais.
folders=$(find . -type d -exec sh -c 'cd "$1";[ "$(ls *.txt 2>/dev/null)" ] \
&& [ -z "$(ls -ad * | grep -v '\.txt$')" ] && echo "$1"' sh {} \;)
echo "$folders" | zip -r@ archive && echo "$folders" | while read folder; do
echo "will remove $folder"
# Uncomment next line for the folder to be removed
# rm -rf "$folder"
done
Editar: aqui está uma solução que cria arquivos zip individuais:
find . -depth -type d -exec sh -c '
cd "$1" || exit
[ "$(ls ./*.txt 2>/dev/null)" ] &&
[ -z "$(ls -ad ./* | grep -v '\.txt$')" ] &&
(
b=$(basename "$1")
cd ..
zip -r "$b.zip" "$b" && rm -rf "$b"
)' sh {} \;