como ter 'find' não retornará o diretório atual


11

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:


14

findretorna 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:

$ 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: encontre a página de manual


Excelente! funciona como eu queria. Eu trabalhei adicionando! -nome 'arquivos', mas me pareceu errado ...
Pinpin

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 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 efeito shoptsomente dentro do sub-shell, caso contrário você teria que desfazê-lo mais tarde shopt -u dotglob.


Isso falhará nas entradas de diretório que começam com .. Também não tente .*, ou você vai combinar muitas outras coisas que nunca pretendeu. ;-)
zigg

Bom ponto, atualizou a resposta, acrescentou usando shopt.
janos 15/02
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.