LINUX: Свяжите все файлы из одного каталога в другой [закрыто]


123

Я хочу ссылку ( ln -s) все файлы , которые находятся в /mnt/usr/lib/в/usr/lib/

Файлов много, как это сделать быстро? :)


Сколько файлов - это «много» и насколько быстро вы считаете «быстрым»?
Эрик Смит

4
Это 50:50 вне зависимости от того, подходит ли он для «serverfault» или «superuser», но это не программирование, то есть не для stackoverflow.
Марк Гравелл

Ответы:


202
ln -s /mnt/usr/lib/* /usr/lib/

Я думаю, это принадлежит суперпользователю.


6
Это не включает скрытые файлы, а связывает целые каталоги. Если что-то из этого не то, что вам нужно, см. Мой ответ. В противном случае это кратчайший путь.
Cascabel

Ты прав. Но библиотеки обычно не прячутся. В любом случае используются точечные файлы, ваше решение будет более удобным.

1
будет ли он постоянно указывать на другую папку?
nmkyuppie

@YuPPie Я думаю, он просто создает жесткую ссылку на каждый файл в каталоге. (это то, что я хотел сегодня, поэтому +1: D)
Отображаемое имя

2
@SargeBorsch Создает символические ссылки (жесткие ссылки бывают разные).
jsejcksn

90

GNU cpимеет возможность создавать символические ссылки вместо копирования.

cp -rs /mnt/usr/lib /usr/

Обратите внимание, что это расширение GNU, которого нет в POSIXcp .


4
Ваш текущий каталог должен быть / usr /, чтобы создать символическую ссылку таким образом
Soul_man

@caf Если местом назначения является существующая папка, тогда папка lib создается в папке / usr /
Тамил Селван C

2
Хороший ответ. Также может использоваться для создания жестких ссылок с -l вместо -s.
Факс


15

Опубликованные решения не будут связывать какие-либо скрытые файлы. Чтобы включить их, попробуйте следующее:

cd /usr/lib
find /mnt/usr/lib -maxdepth 1 -print "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done

Если вам нужно рекурсивно создавать каталоги и только связывать файлы (так что если вы создаете файл в каталоге, его на самом деле /usr/libнет /mnt/usr/lib), вы можете сделать это:

cd /usr/lib
find /mnt/usr/lib -mindepth 1 -depth -type d -printf "%P\n" | while read dir; do mkdir -p "$dir"; done
find /mnt/usr/lib -type f -printf "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done

2
Я считаю, что это также должно работать как способ подстановки в скрытых файлах, если в bash включена расширенная глобализация. Он соответствует всему, что начинается с точки, за которой следует что-то, кроме ничего или другая точка (т.е. исключает ./и ../):ln -s /mnt/usr/lib/.!(|.)* /usr/lib
Cascabel
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.