Se você deseja copiar todos os arquivos .txt em um diretório, use um padrão curinga :
cp direct/direct1/*.txt target
Isso copia todos os arquivos .txt que estão no diretório direct/direct1 para o diretório target (que já deve existir).
Você pode passar vários padrões para copiar arquivos de vários diretórios:
cp direct/direct1/*.txt direct/direct2/*.txt target
Se você deseja copiar os arquivos .txt de todos os subdiretórios de direct , também pode usar um curinga para o diretório:
cp direct/*/*.txt target
Se você deseja copiar somente de determinados diretórios, é possível usar um padrão curinga que corresponda apenas a esses diretórios. Por exemplo, se direct tiver quatro subdiretórios foo , bar , baz e qux e você só quiser copiar arquivos de bar e baz , poderá usar
cp direct/ba?/*.txt target
Nenhum dos exemplos até agora copiou arquivos de direct , ou de subsubdirectories de direct . Se você deseja copiar os arquivos .txt de direct , inclua-os na lista, por exemplo,
cp direct/*.txt direct/*/*.txt target
Se você deseja copiar arquivos de direct , todos os seus subdiretórios, todos os seus subdiretórios, e assim por diante de forma recursiva, você pode usar o curinga ** , se o seu shell suportar. Funciona fora da caixa em zsh, mas em bash , você precisa habilite-o primeiro com shopt -s globstar .
cp direct/**/*.txt target
Note que todos os arquivos são copiados em target , isto não reproduz a estrutura do diretório. Se você quiser reproduzir a estrutura de diretório, você precisa de uma ferramenta diferente, como rsync (tutorial ) ou pax .
rsync -am --include='*.txt' --include='*/' --exclude='*' direct/ target/
cd direct && pax -rw -pe -s'/\.txt$/&/' -s'/.*//' . target/