como ter 'find' não retorna o diretório atual

6

No momento, estou tentando find (e copiar) todos os arquivos e a estrutura de pastas que correspondem a um padrão específico, em um diretório especificado e estou quase lá!

Especificamente, quero recursivamente copiar todas as pastas que não estão iniciando 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 / directories /, os diretórios específicos da máquina começam com '_' e outros, e estou interessado somente em copiar os outros. Por uma razão além de mim, o comando find retorna o diretório / source / path / with / directories / e, portanto, copia seu conteúdo, diretórios começando com '_' incluído.

Alguém tem uma dica do motivo?

Obrigado,

Pascal

    
por Pinpin 20.06.2012 / 20:40

2 respostas

10

find retorna o caminho da raiz porque corresponde aos seus critérios, por exemplo é um diretório e não começa com _ .

Você está procurando por -mindepth 1 , suspeito:

$ cd /tmp
$ mkdir a
$ touch a/b
$ mkdir a/c
$ touch a/c/d
$ find a
a
a/b
a/c
a/c/d
$ find a -mindepth 1
a/b
a/c
a/c/d

Referência: localize manpage

    
por zigg 20.06.2012 / 20:48
0

Alterar de:

find /source/path/with/directories ...

para:

(shopt -s dotglob; find /source/path/with/directories/* ... )

Dessa forma, /source/path/with/directories não será incluído.

O shopt -s dotglob é para que * também corresponda a arquivos e diretórios que começam com . (arquivos ocultos, diretórios).

E a coisa toda é agrupada em um sub-shell com (...) para limitar o efeito de shopt apenas dentro do sub-shell, caso contrário você teria que desfazê-lo mais tarde com shopt -u dotglob .

    
por janos 20.06.2012 / 21:45

Tags