Слишком много копий папок и файлов
Я думаю, что все знакомы с этим сценарием:
find /dir1/dir2/dir3/dir4/* -mtime +5 -exec cp -rf {} /dirA/dirB/dirC/ \;
Моя проблема в том, что я хочу, чтобы содержимое dir4 старше 5 дней, которое будет содержать больше подкаталогов и их содержимое, было скопировано в dirC с неповрежденной структурой каталогов. Пока звучит хорошо, и этот сценарий должен делать то, что я думал.
Но он не делает то, что я думал, что должен. Вместо этого он начинается в dir1, детализируется до самой нижней папки и начинает копирование, затем поднимается и начинается снова в dir4, и так далее, и так далее. Конечный результат - все в структуре папок копируется несколько раз.
Я пробовал rsync, cpio и pax вместо cp, а также с теми же результатами, независимо от того, выполняю ли я rsync -r или cpio -r или pax -r. Все они начинают копировать каждую часть пути к каталогу.
Есть идеи?
1 ответ
У вас есть две проблемы:
- Вы пытаетесь рекурсивно скопировать рекурсивный список (двойная рекурсия), включая файлы, которые вам не нужны
- Вы копируете без сохранения структуры каталогов по отношению к исходному базовому каталогу, тем самым получая искаженное дерево
Вместо этого вы должны без рекурсивного представления рекурсивного списка файлов в соответствующие им каталоги. Вы можете сделать это с rsync
"s --files-from
и процесс замены:
rsync --from0 --files-from <(find ./src -mtime +5 -print0) \
./ ./target
В качестве альтернативы, через cpio
:
find src/ -mtime +5 -print0 | cpio -0 -o | { cd target && cpio -i; }