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_1111
caso haja um1111_1111/2222_2222
, pois ele tentará remover o1111_1111
primeiro, o que não é possível, pois há2222_2222
dir nele,ksh93
não tem o qualificadorod
glob (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