ディレクトリ内のすべての直接シンボリックリンク、つまりシンボリックリンク以外のファイルを指すすべてのシンボリックリンクを一覧表示する必要があります。
私はこれを試みます:
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
またはコマンドはありませんstat
。これfind
コマンドはそうではありません-printf
。
ベストアンサー1
これを行うための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 * .*
別のスクリプトに統合するには、1行のコードとして使用できます。
perl -e 'foreach my $i (@ARGV) { -l $i && do { my $j = readlink($i); print "$i\n" if -e $j and ! -l $j } }' * .*