Não recursivo
Com ksh93 (no OS / X disponível como ksh ):
rmdir {4}(\d)_
(cuidado, pode deletar um diretório chamado {4}(\d)_ se não houver um arquivo que corresponda a esse padrão).
Com zsh (no OS / X disponível como zsh ):
setopt extendedglob
rmdir [0-9](#c4)_[0-9]##(/e:'[[ ${REPLY%_*} = ${REPLY#*_} ]]':)
(esse também tem o benefício de considerar apenas arquivos do tipo diretório , usando o qualificador / glob acima).
Com bash ou outro shell POSIX (como sh da maioria dos sistemas, incluindo OS/X ):
set -- [0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]
for f do
[ "${f#*_}" = "${f%_*}" ] && set -- "$@" "$f"
shift
done
rmdir "$@"
(cuidado, ele pode excluir um diretório chamado [0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9] se não houver arquivos XXXX_XXXX no diretório atual).
Usando find e grep :
find . ! -name . -prune -type d -name '[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]' |
grep -x '\./\(.*\)_' |
xargs rmdir
Com BSD find (como encontrado no OS / X):
find . -maxdepth 1 -regex './\([0-9]\{4\}\)_' -type d -delete
Com o GNU find (normalmente não encontrado no OS / X, a menos que seja instalado via macports / homebrew / fink ...):
find . -maxdepth 1 -regextype grep -regex './\([0-9]\{4\}\)_' -type d -delete
Recursivamente:
-
ksh93:set -o globstar rmdir -- **/{4}(\d)(lembre-se de que não removerá
1111_1111caso haja um1111_1111/2222_2222, pois ele tentará remover o1111_1111primeiro, o que não é possível, pois há2222_2222dir nele,ksh93não tem o qualificadorodglob (para primeira ordem de profundidade) dezsh) -
zsh:setopt extendedglob rmdir -- **/[0-9](#c4)_[0-9]##(Dod/e@'[[ ${${REPLY:t}%_*} = ${REPLY##*_} ]]'@) -
BSD
find:LC_ALL=C find . -regex '.*/\([0-9]\{4\}\)_' -type d -delete -
GNU
find:LC_ALL=C find . -regextype grep -regex '.*/\([0-9]\{4\}\)_' -type d -delete