Как скопировать файлы из нескольких каталогов?

У меня есть несколько текстовых файлов в нескольких каталогах, которые я хочу скопировать в другой. Что я могу сделать, вместо того, чтобы идти в каждый каталог и cp *.txt в этом каталоге?

1 ответ

Решение

Если ни один из ответов в связанных темах не является тем, что вы ищете, вы можете использовать find команда, которая будет искать каталоги рекурсивно вниз от данного родителя. Вы можете указать exec действие, которое нужно выполнить с каждым из найденных им подходящих файлов - в этом случае вы захотите выполнить cp в новый целевой каталог

find /path/to/parent -name '*.txt' -exec cp -t /path/to/newdir {} +

{} заменяется файлами, которые он находит, и + в конце заставляет их пакетировать, чтобы не переполнять максимальное количество аргументов cp может справиться в одной команде. newdir должен уже существовать.

Поскольку вы перемещаете файлы из разных мест в одно место, существует вероятность того, что некоторые имена будут неуникальными, и поэтому вы можете позаботиться о том, чтобы предотвратить перезапись более ранней копии более поздней копией - вы можете сделать это добавив backup вариант

find /path/to/parent -name '*.txt' -exec cp --backup=numbered -t /path/to/newdir {} +

который добавит простой пронумерованный суффикс к каждому дублирующему файлу. Вы можете добавить -v или же --verbose флаг к cp если вы хотите увидеть текущий отчет о файлах, так как он их копирует.

Другие вопросы по тегам