LINUX: Tüm dosyaları bir dizinden diğerine bağlayın [kapalı]


123

Ben (link istiyorum ln -sbulunan tüm dosyaları) /mnt/usr/lib/içine/usr/lib/

Çok fazla dosya var, nasıl hızlı bir şekilde yapılabilir? :)


Kaç dosya "çok" ve ne kadar hızlı "hızlı" kabul ediyorsunuz?
Eric Smith

4
Bu 50:50 "serverfault" ya da "superuser" a uysa da programlama değil, yani stackoverflow için değil.
Marc Gravell

Yanıtlar:


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

Sanırım bu süper kullanıcıya ait.


6
Bu, gizli dosyaları içermez ve tüm dizinleri birbirine bağlar. Bunlardan biri istediğiniz değilse, cevabıma bakın. Aksi takdirde, en kısa yol budur.
Cascabel

Haklısın. Ancak kütüphaneler genellikle gizli değildir. Her durumda dotfiles söz konusu olduğunda, çözümünüz daha kullanışlı hale gelir.

1
kalıcı olarak diğer klasöre işaret edecek mi?
nmkyuppie

@YuPPie Sanırım, dizindeki her dosyaya sabit bağlantı oluşturuyor. (bugün istediğim buydu, yani +1: D)
Görünen Ad

2
@SargeBorsch Sembolik bağlantılar oluşturur (sabit bağlantılar farklıdır).
jsejcksn

90

GNU cp, kopyalama yerine sembolik bağlar yaratma seçeneğine sahiptir.

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

Bunun POSIX'tecp bulunmayan bir GNU uzantısı olduğunu unutmayın .


4
Bu şekilde sembolik bağlantı kurmak için mevcut dizininiz / usr / olmalıdır
Soul_man

@caf Hedef mevcut klasör ise, lib klasörü / usr / klasöründe oluşturulur
Tamil Selvan C

2
İyi cevap. -S yerine -l ile sabit bağlantılar oluşturmak için de kullanılabilir.
Faks


15

Yayınlanan çözümler hiçbir gizli dosyayı bağlamayacaktır. Bunları dahil etmek için şunu deneyin:

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

Dizinleri özyinelemeli olarak oluşturmak ve yalnızca dosyaları bağlamak istemeniz gerekirse (böylece bir dizin içinde bir dosya oluşturursanız, gerçekten içinde /usr/libolmaz /mnt/usr/lib), şunu yapabilirsiniz:

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'ta genişletilmiş globbing'i açtıysanız, bunun gizli dosyalarda joker karakter için bir yol olarak çalışması gerektiğine inanıyorum. Hiçbir şey ya da başka bir nokta (yani o dışlayan başka bir şey, ardından bir nokta ile başlayan herşeyi eşleşir ./ve ../):ln -s /mnt/usr/lib/.!(|.)* /usr/lib
Cascabel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.