Linux: copie todos los archivos de forma recursiva por extensión a un solo directorio

Linux: copie todos los archivos de forma recursiva por extensión a un solo directorio

Estoy intentando copiar todos *.tiflos archivos de ./old al ./new. En ./old tengo muchos subdirectorios con diferentes archivos, y en ./new solo necesito archivos TIF, sin árbol de carpetas.

Así que lo intenté

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

Pero recibí el error:

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

¿Qué estoy haciendo mal?

Respuesta1

Utilice buscar para estofind . -name "*.TIF" -exec cp {} new \;

Entonces findse utiliza para buscar archivos. El comando dice findarchivos que comienzan desde aquí, .donde el nombre del archivo -nametermina en .tifrecuerde las comillas dobles para la expansión del shell. Entonces encontrar todos los tifarchivos es simple.

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

Luego usamos -execpara hacer algo con los archivos, en este caso cplos archivos encontrados {}en el directorio de destino newseguidos de un punto y coma escapado.\;

Respuesta2

Debería ser así. Tienes que ingresar al directorio antiguo:

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

Respuesta3

Es posible que no tenga ningún .tifarchivo en el olddirectorio.

Además, puedes obtener una lista de archivos y copiarlos usando un script simple:

find /old -type f | xargs grep *.tif te daré la lista.

Puedes hacerlo:

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

información relacionada