Atualmente, estou tentando find
(e copiando) todos os arquivos e estrutura de pastas que correspondem a um padrão específico, em um diretório especificado e estou quase lá!
Especificamente, quero copiar recursivamente todas as pastas que não começam com um caractere '_' de um caminho especificado.
find /source/path/with/directories -maxdepth 1 -type d ! -name _\* -exec cp -R {} /destination/path \;
No diretório / source / path / with / directory / path, os diretórios específicos da máquina começam com '_' e outros, e eu só estou interessado em copiar os outros. Por um motivo além de mim, o comando find retorna o diretório / source / path / with / directory / e, portanto, copia seu conteúdo, incluindo o diretório '_'.
Alguém tem uma dica de por que isso é?
Obrigado,
Pascal
Respostas:
find
retorna o caminho raiz porque corresponde aos seus critérios - ou seja, é um diretório e não começa com_
.Você está procurando
-mindepth 1
, eu suspeito:Referência: encontre a página de manual
fonte
Alterar de:
para:
Dessa forma
/source/path/with/directories
, não será incluído.O
shopt -s dotglob
é para que*
também corresponda aos arquivos e diretórios começando com um.
(arquivos ocultos, diretórios).E a coisa toda é envolvida em um sub-shell
(...)
para limitar o efeitoshopt
somente dentro do sub-shell, caso contrário você teria que desfazê-lo mais tardeshopt -u dotglob
.fonte
.
. Também não tente.*
, ou você vai combinar muitas outras coisas que nunca pretendeu. ;-)shopt
.