質問はbash
のシェルスクリプトに関連しています。
スクリプトで現在のディレクトリ内のどのファイルがソフトリンクであるかを確認する方法は?
間違った用語を使用した場合、 ソフトリンク と言うときは、ln -s
を使用して作成されたファイルを指します。
私が考えた唯一のことは、ls -la
を式として評価し、その結果を解析することですが、明らかにこれは最善の解決策ではありません。
man bash
の- 'CONDITIONAL EXPRESSIONS' を参照してください。この場合は-h
が必要です。
for file in *
do
if [ -h "$file" ]; then
echo "$file"
fi
done
スクリプトは本当に必要ないかもしれません。子フォルダーに戻ることなく、現在のフォルダーのみにシンボリックリンクを表示するには:
見つける。 -maxdepth 1 -type l -print
または、さらに情報を取得するには、次のいずれかを使用します。
見つける。 -maxdepth 1 -type l -exec ls -ld {} + find。 -maxdepth 1 -type l -print0 | xargs -0 ls -ld
ifファイルがシンボリックリンクであると言うには、readlink
を使用できます。これは、シンボリックリンクでない場合は何も出力しません。次の例はあまり役に立ちませんが、readlink
が通常のファイルとフォルダーを無視する方法を示しています。次のいずれかを使用します。
見つける。 -maxdepth 1 -exec readlink {} + find。 -maxdepth 1 -print0 | xargs -0 readlink
上記の-exec ... +
およびxargs ...
は-exec ... \;
よりもはるかに高速であることに注意してください。お気に入り:
time find/usr/bin -maxdepth 1 -type l -exec ls -ld {} \; real 0m0.372s user 0m0.087s sys 0m0.163s time find/usr/bin -maxdepth 1 -type l -exec ls -ld {} + real 0m0.013s user 0m0.004s sys 0m0.008s time find/usr/bin -maxdepth 1 -type l -print0 | xargs -0 ls -ld real 0m0.012s user 0m0.004s sys 0m0.009s