LINUX: Menautkan semua file dari satu ke direktori lain [ditutup]

123

Saya ingin menautkan ( ln -s) semua file yang ada di /mnt/usr/lib/dalamnya/usr/lib/

Ada banyak sekali file, bagaimana cara melakukannya dengan cepat? :)

SharpC
sumber
Berapa banyak file yang "banyak", dan seberapa cepat Anda menganggapnya "cepat"?
Eric Smith
4
Ini adalah 50:50 apakah akan cocok dengan "serverfault" atau "superuser", tetapi ini bukan pemrograman, jadi tidak untuk stackoverflow.
Marc Gravell

Jawaban:

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

Saya kira, ini milik superuser.

Tim Cooper
sumber
6
Ini tidak termasuk file tersembunyi, dan ini menautkan seluruh direktori. Jika salah satu dari ini bukan yang Anda inginkan, lihat jawaban saya. Jika tidak, ini adalah jalan terpendek.
Cascabel
Kamu benar. Tapi perpustakaan biasanya tidak disembunyikan. Dalam kasus apapun, dotfiles terlibat, solusi Anda akan lebih berguna.
1
akankah ini mengarah ke folder lain secara permanen?
nmkyuppie
@YuPPie Saya kira, itu hanya membuat hardlink ke setiap file di direktori. (ini yang saya inginkan hari ini, jadi +1: D)
Nama Tampilan
2
@SargeBorsch Ini menciptakan tautan simbolik (tautan keras berbeda).
jsejcksn
90

GNU cpmemiliki opsi untuk membuat symlink daripada menyalin.

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

Perhatikan ini adalah ekstensi GNU yang tidak ditemukan di POSIXcp .

kafe
sumber
4
Direktori Anda saat ini harus / usr / untuk membuat tautan simbolis dengan cara ini
Soul_man
@caf Jika tujuannya adalah folder yang ada, maka folder lib dibuat di dalam folder / usr /
Tamil Selvan C
2
Jawaban yang bagus. Dapat juga digunakan untuk membuat tautan keras dengan -l, bukan -s.
Faks
19
ln -s /mnt/usr/lib/* /usr/lib/
Michael Krelin - peretas
sumber
15

Solusi yang diposting tidak akan menautkan file tersembunyi apa pun. Untuk memasukkannya, coba ini:

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

Jika Anda kebetulan ingin membuat direktori secara rekursif dan hanya menautkan file (sehingga jika Anda membuat file di dalam direktori, sebenarnya /usr/libtidak ada /mnt/usr/lib), Anda dapat melakukan ini:

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
Bertingkat
sumber
2
Saya percaya ini juga harus berfungsi sebagai cara untuk wildcard di file tersembunyi, jika Anda telah mengaktifkan globbing diperpanjang di bash. Ini cocok dengan segala sesuatu yang dimulai dengan sebuah titik, diikuti oleh sesuatu selain tidak ada atau titik lain (yaitu tidak termasuk ./dan ../):ln -s /mnt/usr/lib/.!(|.)* /usr/lib
Cascabel