2

У меня есть один каталог, в котором появляются файлы. Я хочу запустить скрипт сценария, который находит все файлы в этом каталоге, которые имеют только одну ссылку на них, и жестко связывает их в другом каталоге. Тем не менее, я хочу, чтобы структура каталогов во втором каталоге была создана, чтобы соответствовать первому.

find /srcdir / -links 1 -exec ln {} / dstdir / \;

Делает жесткую ссылку на все файлы, но не создает нужные мне каталоги.

Если каталог содержит только файлы, которые уже имеют несколько ссылок, этот каталог не нужно создавать в месте назначения.

2 ответа2

3

Поскольку жесткие ссылки довольно дешевы, вы можете сделать их такими: (это создаст жесткую ссылку на все файлы и создаст каталог, как в исходном коде)

cp -al source dest

Затем вы можете удалить жесткие ссылки, которые находятся в другом месте вашей файловой системы. (если проблема заключается в двойных жестких ссылках) Используя слегка адаптированную команду поиска, которую вы разместили.

0

Если я правильно понял ваш вопрос, и у вас есть один каталог (sourcedir) с различными подкаталогами, и связанные файлы могут находиться либо в /sourcedir/ либо в /sourcedir/foo либо /sourcedir/bar т.д., Тогда это должно сделать то, что вам нужно :

find /sourcedir/ -links 1  | sed 's/.sourcedir.//' | while read n; do \
  mkdir -p /destdir/`dirname "$n"`; ln /sourcedir/"$n" /destdir/"$n"; \
done

Он использует dirname для получения подкаталога каждого файла и mkdir -p для создания структуры каталогов в каталоге назначения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .