LINUX: Połącz wszystkie pliki z jednego do drugiego katalogu [zamknięte]


123

Chcę łącza ( ln -s) wszystkich plików znajdujących się /mnt/usr/lib/w/usr/lib/

Plików jest dużo, jak to zrobić szybko? :)


Ile plików to „dużo” i jak szybko uważasz, że „szybko”?
Eric Smith

4
Jest to 50:50, niezależnie od tego, czy pasowałoby to „serverfault”, czy „superuser”, ale nie jest to programowanie, więc nie w przypadku przepełnienia stosu.
Marc Gravell

Odpowiedzi:


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

Myślę, że to należy do superużytkownika.


6
Nie obejmuje to ukrytych plików i łączy całe katalogi. Jeśli któryś z nich nie jest tym, czego chcesz, zobacz moją odpowiedź. W przeciwnym razie jest to najkrótsza droga.
Cascabel

Masz rację. Ale biblioteki zwykle nie są ukryte. W każdym razie dotfile jest bardziej przydatny.

1
czy będzie wskazywać na inny folder na stałe?
nmkyuppie

@YuPPie Myślę, że po prostu tworzy twarde łącze do każdego pliku w katalogu. (właśnie tego chciałem dzisiaj, więc +1: D)
Nazwa wyświetlana

2
@SargeBorsch Tworzy dowiązania symboliczne (dowiązania twarde są różne).
jsejcksn

90

GNU cpma opcję tworzenia dowiązań symbolicznych zamiast kopiowania.

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

Zauważ, że jest to rozszerzenie GNU, którego nie znaleziono w POSIXcp .


4
Twój aktualny katalog powinien być / usr / zrobić dowiązanie symboliczne w ten sposób
Soul_man

@caf Jeśli miejscem docelowym jest istniejący folder, folder lib jest tworzony w folderze / usr /
Tamil Selvan C

2
Dobra odpowiedź. Może być również używany do tworzenia twardych dowiązań z opcją -l zamiast -s.
Faks


15

Opublikowane rozwiązania nie będą łączyły żadnych ukrytych plików. Aby je uwzględnić, spróbuj tego:

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

Jeśli chcesz rekurencyjnie tworzyć katalogi i tylko pliki z linkami (tak, że jeśli tworzysz plik w katalogu, tak naprawdę /usr/libnie jest /mnt/usr/lib), możesz to zrobić:

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
Uważam, że powinno to również działać jako sposób na symbole wieloznaczne w ukrytych plikach, jeśli w bashu włączono rozszerzone globowanie. Dopasowuje wszystko zaczynające się od kropki, po której następuje coś innego niż nic lub inna kropka (tj. Wyklucza ./i ../):ln -s /mnt/usr/lib/.!(|.)* /usr/lib
Cascabel
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.