Могу ли я объединить несколько каталогов в один? - PullRequest
22 голосов
/ 08 января 2009

У меня такое чувство, что я уже знаю ответ на этот вопрос, но я подумал, что проверю.

У меня есть несколько разных папок:

images_a/
images_b/
images_c/

Могу ли я создать какую-нибудь символическую ссылку, чтобы в этом новом каталоге содержалось содержимое всех этих каталогов? То есть этот новый "images_all" будет содержать все файлы в images_a, images_b и images_c?

Ответы [ 3 ]

12 голосов
/ 08 января 2009

Нет. Вы должны были бы символически связать все отдельные файлы.

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

rm -f images_all/*
for i in images_[abc]/* ; do; ln -s $i images_all/$(basename $i) ; done

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

Вам также необходимо следить за тем, чтобы в двух или более каталогах существовало одно имя файла.


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

Если вы свяжете их с другим каталогом , тогда сделайте относительно быстрые mv операции, которые минимизируют время. Что-то вроде:

mkdir images_new
for i in images_[abc]/* ; do
    ln -s $i images_new/$(basename $i)
done

# These next two commands are the minimal-time switchover.
mv images_all images_old
mv images_new images_all

rm -rf images_old

Я не проверял это, поэтому любой, кто его внедряет, должен подтвердить пригодность или иное.

8 голосов
/ 08 января 2009

Вы можете попробовать объединить файловую систему, такую ​​как unionfs!

http://www.filesystems.org/project-unionfs.html

http://aufs.sourceforge.net/

0 голосов
/ 14 февраля 2019

чтобы добавить к отличному ответу Паксдиабло, я думаю, вы могли бы использовать cp -s
(-s или --symbolic-link) который делает символические ссылки вместо буквального копирования

чтобы ускорить или упростить массовое добавление символических ссылок в папку «слияния» A файлов из папок B и C.

(хотя я не проверял это)

Я не могу вспомнить верхнюю часть моей головы, но я уверен, что есть какой-то вариант для CP, чтобы НЕ перезаписывать существующие, таким образом, только символические ссылки новых файлов будут "cp -s" ed

...