Se você estiver em um sistema Linux com utilitários GNU (em oposição ao BusyBox ou outra coisa), você pode fazer isso de forma muito eficiente com find
e cp
:
find /src -maxdepth 1 -type d -regex '.*/[0-9A-Za-z-]+$' -exec cp -r -t /dst {} +
Isso localiza todos os diretórios no nível superior de /src
que contêm apenas caracteres alfanuméricos ou hífens e, em seguida, transfere todos eles para cp
para copiá-los recursivamente em /dst
. A opção -t
para cp
permite especificar o "diretório de destino" primeiro, portanto, todos os argumentos restantes podem ser os itens que você deseja copiar. Isso permite que você use o {} +
construct do find, o que faz com que ele passe o maior número possível para uma única invocação de cp
(semelhante a xargs
). Dessa forma, se você tiver uma tonelada de diretórios para copiar, não estará chamando cp
uma vez para cada um.