Linux: рекурсивное копирование всех файлов по расширению в один каталог

Linux: рекурсивное копирование всех файлов по расширению в один каталог

Я пытаюсь скопировать все *.tifфайлы из ./old в ./new. В ./old у меня много подкаталогов с разными файлами, а в ./new мне нужны только файлы TIF, без дерева папок.

Итак, я попробовал

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

Но возникла ошибка:

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

Что я делаю не так?

решение1

Используйте find для этогоfind . -name "*.TIF" -exec cp {} new \;

So findиспользуется для поиска файлов. Команда говорит findфайлы, начиная отсюда ., где имя файла -nameзаканчивается на .tifзапомните двойные кавычки для расширения оболочки. Так что найти все tifфайлы просто.

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

Затем мы используем, -execчтобы что-то сделать с файлами, в данном случае cpнайденные файлы {}в целевом каталоге, newза которыми следует экранированная точка с запятой.\;

решение2

Должно быть так. Вам нужно войти в старый каталог:

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

решение3

.tifВозможно, в каталоге нет файлов old.

Более того, вы можете получить список файлов и скопировать их с помощью простого скрипта:

find /old -type f | xargs grep *.tif предоставлю вам список.

Вы можете сделать это:

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

Связанный контент