Linux: Copie todos os arquivos recursivamente por extensão para um único diretório

Linux: Copie todos os arquivos recursivamente por extensão para um único diretório

Estou tentando copiar todos *.tifos arquivos de ./old para ./new. Em ./old tenho muitos subdiretórios com arquivos diferentes, e em ./new preciso apenas de arquivos TIF, sem árvore de pastas.

Então, eu tentei

cp -vR ./old/*.TIF ./new`

Mas recebi o erro:

No such file or directory "./old/*.TIF"

O que estou fazendo de errado?

Responder1

Use find para issofind . -name "*.TIF" -exec cp {} new \;

Então findé usado para localizar arquivos. O comando está dizendo findarquivos começando aqui .onde o nome do arquivo -nametermina em .tiflembre-se das aspas duplas para expansão do shell. Então, encontrar todos os tifarquivos é simples.

find . -name "*.tif"
./2/3/3.tif
./2/2.tif
./1.tif

Em seguida, usamos -execpara fazer algo com os arquivos, neste caso, cpencontramos os arquivos {}no diretório de destino newseguido por um ponto e vírgula com escape\;

Responder2

Deveria ser assim. Você tem que entrar no diretório antigo:

cd old
cp -R *.tif ../new

Responder3

Talvez você não tenha nenhum .tifarquivo no olddiretório.

Além disso, você pode obter uma lista de arquivos e copiá-los usando um script simples:

find /old -type f | xargs grep *.tif lhe dará a lista.

Você consegue fazer isso:

for i in `find /old -type f | xargs grep *.tif` 
do
cp $i /new
done;

informação relacionada