Halo semuanya, saya perlu melakukan ini di linux:
- Diberikan: nama file 'foo.txt'
- Temukan: semua file yang merupakan tautan simbolis ke 'foo.txt'
Bagaimana cara melakukannya? Terima kasih!
Halo semuanya, saya perlu melakukan ini di linux:
Bagaimana cara melakukannya? Terima kasih!
Jawaban:
Itu tergantung, jika Anda mencoba menemukan tautan ke file tertentu yang dipanggil foo.txt,
maka ini adalah satu-satunya cara yang baik:
find -L / -samefile path/to/foo.txt
Di sisi lain, jika Anda hanya mencoba menemukan tautan ke file apa pun yang kebetulan diberi nama foo.txt
, maka sesuatu seperti
find / -lname foo.txt
atau
find . -lname \*foo.txt # ignore leading pathname components
-xtype l
untuk hanya menemukan daftar symlink
find . -lname '*foo.dir*'
(misalnya cocok file.txt -> ../foo.dir/file.txt
)
Temukan nomor inode file dan kemudian cari semua file dengan nomor inode yang sama:
$ ls -i foo.txt
41525360 foo.txt
$ find . -follow -inum 41525360
Sebagai alternatif, coba lname
opsi find
, tetapi ini tidak akan berfungsi jika Anda memiliki symlink relatif misalnyaa -> ../foo.txt
$ find . -lname /path/to/foo.txt
-samefile
opsi dengan -L
untuk efek yang sama, tanpa harus mencari inode sendiri
foo
adalah direktori, gunakan ln -di
, dalam satu baris:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
Saya lebih suka menggunakan symlinks
utilitas, yang juga berguna saat mencari symlink yang rusak. Instal oleh:
sudo apt install symlinks
Tampilkan semua symlink di folder dan subfolder saat ini:
symlinks -rv .
-r
: rekursif-v
: verbose (tampilkan semua symlink, tidak hanya yang rusak)Untuk menemukan symlink tertentu, cukup grep
:
symlinks -rv . | grep foo.txt