Shell
列出直接符號連結(不指向另一個符號連結的連結)
我需要列出一個目錄中的所有直接符號連結,即指向另一個不是符號連結的文件的符號連結。
我試著這樣做:
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 上工作。沒有
readlink
orstat
命令。該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 } }' * .*