Como posso copiar vários arquivos em diretórios diferentes usando o comando cp do Linux?

0

Você poderia me ajudar a descobrir como fazer isso?

Digamos que sob este diretório:

/home/user1/

existem 100 pastas, o nome dessas pastas são 1, 2, 3 ... a 100. Em cada pasta, existem 26 arquivos.

  • Os nomes dos arquivos na pasta 1 são 1a, 1b ... a 1z.
  • Os nomes dos arquivos na pasta 2 são 2a, 2b ... a 2z.
  • Os nomes dos arquivos na pasta 100 são 100a, 100b ... a 100z.

Como posso copiar todos os arquivos terminados em z para uma nova pasta?

    
por cynthia 29.09.2011 / 03:57

2 respostas

1

Use curingas.

cp /home/user1/*/*z newfolder/

Alguns curingas incluem * , ? e [] .

* matches any number of characters which can be any character

? matches one character which can be any character

[] matches one character which is within the range of characters defined

Exemplo:

[jin@crypt /tmp] % ls foo/*/* 
foo/bar/1a  foo/bar/1c  foo/baz/1a  foo/baz/1c  foo/baz/2d  foo/quux/1b foo/quux/1d
foo/bar/1b  foo/bar/1d  foo/baz/1b  foo/baz/1d  foo/quux/1a foo/quux/1c foo/quux/3d

[jin@crypt /tmp] % ls foo/*/*d
foo/bar/1d  foo/baz/1d  foo/baz/2d  foo/quux/1d foo/quux/3d

[jin@crypt /tmp] % ls foo/ba?/*d
foo/bar/1d  foo/baz/1d  foo/baz/2d

[jin@crypt /tmp] % ls foo/ba??/*d
zsh: no matches found: foo/ba??/*d

[jin@crypt /tmp] % ls foo/baz/*[a-c]
foo/baz/1a  foo/baz/1b  foo/baz/1c
    
por 29.09.2011 / 04:12
1

Use o comando find:

find . -type f -name \*z -exec cp {} newfolder/ \;

Isso parece um pouco complicado, então vou dividi-lo.

Encontra os arquivos encontrados, onde você os informa e abaixo. O ponto por si só significa "diretório atual". O próximo parâmetro '-tipo f' significa 'localizar coisas do tipo arquivo'. O '-name * z' significa 'e coisas com um nome que corresponda' * z '. Em seguida, o '-exec cp {} newfolder /' significa executar o comando cp no item encontrado - o comando substitui o nome de arquivo correspondente do {}. Finalmente, o '\;' encerra a string do comando exec - errar isso e você receberá um erro.

Se você quiser apenas ver quais arquivos correspondem, faça o seguinte:

find . -type f -name \*z -print

Isso só imprimirá os arquivos correspondentes na tela.

Isso deve funcionar em praticamente qualquer terminal Linux, UNIX ou Mac.

    
por 29.09.2011 / 14:51