Saya dapat memeriksa, apakah ada file dan merupakan tautan simbolik dengan -L
for file in *; do
if [[ -L "$file" ]]; then echo "$file is a symlink"; else echo "$file is not a symlink"; fi
done
dan jika itu adalah direktori dengan -d:
for file in *; do
if [[ -d "$file" ]]; then echo "$file is a directory"; else echo "$file is a regular file"; fi
done
Tetapi bagaimana saya bisa menguji hanya tautan ke direktori?
Saya mensimulasikan semua kasus dalam folder tes:
/tmp/test# ls
a b c/ d@ e@ f@
/tmp/test# file *
a: ASCII text
b: ASCII text
c: directory
d: symbolic link to `c'
e: symbolic link to `a'
f: broken symbolic link to `nofile'
shopt -s dotglob
[[
, dan saya menganggap itu sebagai titik awal yang logis. Diskusi tentang manfaat[
vs tidak[[
termasuk dalam cakupan untuk jawaban ini (tetapi tersedia di sini ).Berikut adalah perintah tunggal yang akan secara simultan mendaftar symlink yang targetnya adalah direktori (dimulai dari direktori saat ini):
find . -type l -xtype d
Referensi: http://www.commandlinefu.com/commands/view/6105/find-all-symlinks-that-link-to-directories
sumber
Solusi dengan
find
dan menggunakan fungsi:sumber
find
danwhile read
untuk itu agak berlebihan ...