файлы unix cp из подпапок с шаблоном в новое место назначения с сохранением подпапок

В юникс. Как я могу скопировать файлы с определенным шаблоном («шаблон») в новое место, сохраняя структуру вложенных папок:

/from/dir1name/a.pattern.b
/from/dir1name/c.pattern.d
/from/dir2name/e.pattern.f
/from/dir2name/g.pattern.h

Следует скопировать в:

 /to/dir1name/a.pattern.b
 /to/dir1name/c.pattern.d
 /to/dir2name/e.pattern.f
 /to/dir2name/g.pattern.h

Что-то в этом направлении не сохранит структуру подпапок:

cp /from/*dir/*pattern* /to/

Нужен ли цикл для понимания имен каталогов (псуодокод):

for d in from/dir*; do cp "from/$d/*pattern*" "to/$d/"; done

Это, должно быть, спрашивали раньше, но я не смог найти его на SO.


person user3375672    schedule 23.02.2017    source источник
comment
Взгляните на утилиту find вместе с ее функцией exec.   -  person arkascha    schedule 23.02.2017
comment
Я знаю об этом, спасибо, но я все еще не могу сохранить структуру папок. Например. find /from/*dir/ -type f -iregex шаблон -exec cp {} /to/ \   -  person user3375672    schedule 23.02.2017


Ответы (1)


GNU cp имеет параметр --parents, который может быть полезен. cd /from ; cp --parents dir*/*pattern* /to/

Сначала вам нужно cd, чтобы та часть пути, которую вы не хотите реплицировать, не отображалась в исходных аргументах для cp.

В традиционном unix cp нет эквивалента; вам придется написать свой собственный цикл и включить mkdir команды для промежуточных уровней, или схитрить и использовать tar:

(cd /from ; tar cf - dir*/*pattern*) | (cd /to ; tar xvf -)
person Community    schedule 23.02.2017