Как скопировать избранные файлы вместе со структурой каталогов

Октябрь 31st, 2012

Иногда необходимо скопировать выборочные файлы вместе со всей структурой каталогов.

На помощь приходит команда cpio!Простой пример:

find /source_path | cpio -pdmuv /dest_path

где:

find /source_path – формируем на вход список файлов для копирования. Можно выдать уже подготовленный список из какого-либо файла, можно выдать из большого конвейера с обработчиками имен и т.д.

cpio -pdmuv /dest_path – копируем файлы, пришедшие в stdin в папочку /dest_path, здесь опции означают:

-p – читать список имен файлов из стандартного потока (stdin)

-d – при необходимости создавать каталоги

-m – время изменения файла делать как у источника

-u – если такие файлы уже существуют, то затереть их

-v – вывести в стандартный вывод (stdout) список копируемых файлов

cpio создает полные пути, как они ему и пришли на вход. т.е. если вы на вход подаете /aaa/bbb/ccc, то в результате получите /dest_path/aaa/bbb/ccc

По-этому используйте относительные пути (начинаются с символа точки . ), а не абсолютные.

Для абсолютных путей, можно использовать под-оболочку:

(cd /source_path; find . | cpio -pdmuv /dest_path)

Здесь cd – изменяет текущей каталог, но так как это делается в подоболочке, то при выходе из нее текущий каталог остается прежним.


Смотрите также: