私が作った場所/tmp/test/
mkdir somedir
ln -s somedir/ somelink
欲しいディレクトリのみを繰り返す:
for file in */ ; do
if [[ -d "$file" && ! -L "$file" ]]; then
echo "$file is a directory";
fi;
done
しかし、なぜこのようなことが起こるのでしょうかsomelink is a directory
?
そしてスラッシュがなければ現れませんか?
for file in * ; do
...
zshは違いを作りますか?
ベストアンサー1
与えられた引数の末尾のスラッシュは、-L
シンボリックリンクが常に解決されるようにします(つまり、lstat(2)呼び出しレベルで)。 POSIX.1を参照してください。基本定義、一般概念、パス名の解決、またはLinuxの「末尾のスラッシュ」経路分析(2)。
これは特定の事項に限定されない。扱いにくい。
簡単に使えますパラメータ拡張末尾のスラッシュを削除します。
[[ … -L "${file%/}" … ]]
上記のコードは、Bourneに似たすべてのシェルで動作します(ケシ、禁煙健康増進協会、スプリント、強く打つ、扱いにくい待つ)。