2009-08-28 2 views
90

Я хочу связать (пер -s) все файлы, которые находятся в/мнт/USR/Lib/в/USR/Lib/LINUX: Ссылка все файлы из одного в другой каталог

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

+0

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

+3

Это 50:50, будет ли он соответствовать «serverfault» или «superuser», но это не программирование, поэтому не для stackoverflow. –

ответ

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

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

+1

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

+0

Вы правы. Но библиотеки обычно не скрываются. В любом случае, если вы хотите использовать dotfiles, ваше решение станет более удобным. – flokra

+1

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

14

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

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 
+1

Я считаю, что это также должно работать как подстановочный знак в скрытых файлах, если у вас есть расширенное зависание, включенное в bash. Он соответствует всему, начиная с точки, за которым следует что-то другое, кроме ничего или другой точки (т.е. оно исключает '. /' И '../'): 'ln -s/mnt/usr/lib /.! (|.) */usr/lib' – Cascabel

68

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

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

Примечание это расширение GNU не найден in POSIX cp.

+2

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

+0

@caf Если папка назначения является существующей, то папка lib создается внутри в/usr/папке –