Daftar symlink di direktori saat ini?


8

Pertanyaan ini berbicara tentang menemukan direktori dalam direktori saat ini. Solusinya pada dasarnya:

ls -d */

Itu hebat, tetapi bagaimana saya bisa dengan mudah mendaftar symlink? Apakah saya harus menggunakan sesuatu seperti

find . -xtype l -d 1
(intended to find symlinks max depth 1 - doesn't work)

Atau ada cara yang lebih mudah? Bisakah l digunakan untuk ini?


Pada sistem Ubuntu saya, lihat sekilas pada man findacara yang -dmerupakan sinonim untuk -depth(untuk kompatibilitas dengan FreeBSD, NetBSD, MacOS X dan OpenBSD.), Yaitu. tidak sama dengan -maxdepth. . . -depth Proses isi setiap direktori sebelum direktori itu sendiri
Peter.O

Jawaban:


9

Di zsh (tambahkan Ndi dalam tanda kurung untuk menyertakan symlink yang namanya dimulai dengan a .):

echo *(@)

Dengan sebagian besar findimplementasi:

find -maxdepth 1 -type l

Sesuai dengan POSIX:

find . -type d \! -name . -prune -o -type l -print

Atau dengan lingkaran shell:

for x in * .*; do
  if [ -h "$x" ]; then echo "$x"; done
done

1
Untuk -pruneopsi, Anda harus menggunakan find topdir ! -name topdir -prune; jika tidak, direktori awal juga akan diabaikan.
Arcege

6

Ini bukan pada Mac, tapi

find . -maxdepth 1 -type l

bekerja untukku.


3

Anda harus menggunakan -typedan tidak -xtype:

   -xtype c
          The same as -type unless the file is a symbolic link.  For  sym‐
          bolic  links:  if the -H or -P option was specified, true if the
          file is a link to a file of type c; if the -L  option  has  been
          given,  true  if  c is `l'.  In other words, for symbolic links,
          -xtype checks the type of the file that -type does not check.

Standarnya adalah -P, jadi opsi -xtype akan mencoba menentukan file yang dihasilkan, bukan symlink itu sendiri. Sebenarnya, saya mendapatkan beberapa hasil positif, yang sepertinya seperti bug. The -P -xtype lharus kembali benar (di symlink) IFF resultan itu sendiri merupakan link simbolik.

Bisa juga menggunakan: ls -FA | sed -ne 's/@//p'yang hanya akan menampilkan symlink.


solusi ls bagus
frogstarr78

2
sed -ne 's/@//p'(dan bahkan sed -ne 's/@$//p') bukan tes aman, karena versi pertama akan memberikan false positive ketika @terjadi di mana saja dalam output ls , dan yang kedua akan mengembalikan postive palsu ketika nama file benar-benar berakhir@
Peter.O

1

Untuk mengetahui hanya file yang merupakan symlink di dalam direktori saat ini:

find . -type l -printf '%p -> %l\n'

Ini akan secara rekursif mendaftar semua file symlink. Juga, ini menunjukkan file aktual yang ditunjuknya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.