temukan penggunaan dengan -L

34

saya sudah

link -> file

Saya lakukan

find -L . -name 'link'

Dan dapatkan

./link

Mengapa demikian?

man find mengatakan:

-L: Ikuti tautan simbolis. Ketika menemukan memeriksa atau mencetak informasi tentang file, informasi yang digunakan harus diambil dari properti file yang ditunjuk oleh tautan, bukan dari tautan itu sendiri (kecuali jika itu adalah tautan simbolis atau temuan tidak dapat memeriksa file tersebut. ke mana tautan menunjuk).

Ankur Agarwal
sumber

Jawaban:

12

Dengan -L, ini memeriksa properti dari file - konten atau metadata, bukan milik tautan. Misalnya jika Anda menggunakan -atime, itu akan memeriksa atimefile, bukan tautannya:

$ find testdir/ -name link -newer testdir/ref
testdir/link
$ find -L testdir/ -name link -newer testdir/ref
$

testdir/linkdibuat setelahnya testdir/ref, tetapi file yang ditunjuknya tidak.

Kevin
sumber
1
Bisakah Anda jelaskan mengambil contoh saya? Apa yang saya pahami adalah ini: Dalam contoh saya, find memulai pencariannya. Itu bertemu ./link, karena -L berlaku itu referensi dan mengambil sifat ./file. Ini membandingkan nama ./file dengan pola 'tautan' dan karena tidak cocok, tidak boleh melaporkan o / p. Apa yang salah dengan alasan saya?
Ankur Agarwal
Dari manual menemukan yang Anda kutip, "informasi yang digunakan harus diambil dari properti file yang menjadi titik tautan." Nama file bukan salah satu propertinya, jadi masih menggunakan nama tautannya. Itu juga jauh lebih berguna daripada nama file asli.
Kevin
"Nama file tersebut bukan salah satu propertinya" Saya tidak tahu itu. Adakah atribut file lainnya yang tidak dianggap properti? Sejujurnya saya masih skeptis dan akan menunggu apa yang orang lain katakan.
Ankur Agarwal
Sama seperti @abc, tidak tahu bahwa nama file bukan properti file. Di mana saya dapat menemukan informasi ini dalam dokumentasi dan / atau halaman manual? Silakan merujuk ke tempat saya dapat mempelajari lebih lanjut tentang properti file.
Joker
34

Aturan umum adalah bahwa jika suatu perintah beroperasi pada tautan (yaitu entri direktori, yang merupakan penunjuk ke inode) maka perintah tersebut memperlakukan symlink sebagai dirinya sendiri alih-alih sebagai objek yang ditunjuk tautan. Kalau tidak, perintah beroperasi pada titik symlink. Dengan demikian cpmengikuti symlink secara default dan menyalin isi file yang ditunjuk oleh tautan. Tetapi ketika Anda meminta cpuntuk berurusan dengan entri direktori dengan menentukan -R, itu berhenti mengikuti symlink. mvselalu berfungsi dengan entri direktori, sehingga tidak pernah mengikuti symlink.

The findaktivitas normal perintah adalah untuk beroperasi pada entri direktori, sehingga symlink tidak diikuti secara default. Menambahkan -Lpenyebab findmengikuti symlink untuk semua properti kecuali yang tidak dapat diabaikan ketika melakukan pencarian direktori, namanya. Salah satu tujuannya find -nameadalah untuk memberikan input untuk perintah seperti mvdan rm, yang beroperasi pada entri direktori. Akan ada hasil yang tidak menyenangkan dan mengejutkan jika find -L dir -namebisa menghasilkan nama yang menunjuk di luar pohon direktori dir.

Kyle Jones
sumber
WOW! Mengapa konsep halus ini tidak diilustrasikan dengan baik di halaman manual (kecuali saya melewatkannya)? Ini kejutan besar bagi saya.
Ankur Agarwal
2
@Kyle Jones There would be unpleasant and surprising results if find -L dir -name` dapat menghasilkan nama-nama yang menunjuk di luar pohon direktori yang berakar pada dir.` => bukankah seharusnya begitu: akan ada yang tidak menyenangkan ... jika find dir -name pattern...? karena menambahkan -L memungkinkan menunjuk ke dir luar
timotheecour
Jadi bagaimana cara cp -Rmenyalin barang di bawah symlink?
javadba