LINUX: Пов’язати всі файли з одного в інший каталог [закрито]


123

Я хочу посилання ( ln -s) всі файли , які знаходяться в /mnt/usr/lib/в/usr/lib/

Файлів багато, як це зробити швидко? :)


Скільки файлів "лотів", і як швидко ви вважаєте "швидким"?
Ерік Сміт

4
Це 50:50, чи відповідає це "serverfault" або "superperuser", але це не програмування, тому не для stackoverflow.
Marc Gravell

Відповіді:


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

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


6
Сюди не входять приховані файли, і вони посилаються на цілі каталоги. Якщо будь-яке з них не є тим, чого ви хочете, дивіться мою відповідь. Інакше це найкоротший шлях.
Каскабель

Ти маєш рацію. Але бібліотеки зазвичай не приховані. У будь-якому випадку дотфіли задіяні, ваше рішення стане більш зручним.

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 / folder
Tamil Selvan 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.