Shell

列出直接符號連結(不指向另一個符號連結的連結)

  • April 24, 2015

我需要列出一個目錄中的所有直接符號連結,即指向另一個不是符號連結的文件的符號連結。

我試著這樣做:

for i in $(ls -1A); do

   first_type=$(ls -l $i | cut -b 1)

   if [ $first_type == 'l' ]
   then

       next=$(ls -l $i | awk '{print $NF}')
       next_type=$(ls -l $next | cut -b 1)

       if [ $next_type != 'l' ]
       then
           #Some code
       fi

   fi

done

但在這種情況下,腳本會跳過名稱中包含空格/製表符/換行符的文件(包括文件名的開頭和結尾)。有沒有辦法解決這個問題?

我在 Solaris 10 上工作。沒有readlinkorstat命令。該find命令沒有-printf.

我可以為您提供一個 perl 片段來為您執行此操作:

#!/usr/bin/perl
#
foreach my $i (@ARGV) {
   # If it is a symlink then...
   -l $i and do {
       # First indirection; ensure that it exists and is not a link
       my $j = readlink($i);
       print "$i\n" if -e $j and ! -l $j
   }
}

如果您將其另存為/usr/local/bin/if-link並使其可執行(chmod a+x /usr/local/bin/if-link),您可以像這樣使用它

/usr/local/bin/if-link * .*

要將其合併到另一個腳本中,您可以將其用作單行

perl -e 'foreach my $i (@ARGV) { -l $i && do { my $j = readlink($i); print "$i\n" if -e $j and ! -l $j } }' * .*

引用自:https://unix.stackexchange.com/questions/197982