findコマンドを使用してシンボリックリンクとディレクトリを見つける方法

findコマンドを使用してシンボリックリンクとディレクトリを見つける方法

私はfindコマンドが嫌いです。ただ探してみたいです。私が長年使ってきたLinuxの世界で断然最悪に設計されたCLIツールです。

次のコマンドは何も返さないことがわかりました。

cd "$go_proj_path_root" && cd .. && find "$go_proj_path_root" -mindepth 1 -maxdepth 1 -type l -type d

明らかに、-type lと-type dが互いに矛盾しているので、何も返しませんか?ちょうど使用している場合:

cd "$go_proj_path_root" && cd .. && find "$go_proj_path_root" -mindepth 1 -maxdepth 1 -type l 

次に、ディレクトリ内のシンボリックリンクを探します。同じコマンドを使用してディレクトリとシンボリックリンクを見つける方法はありますか?とてもひどいので見つけました!シンボリックリンクだけが必要な場合は、-type l..wtfを使用してください。

ベストアンサー1

はい、-type l -type d「ファイルがディレクトリの場合」を意味します。そしてシンボリックリンク"。試してみたいのはです\( -type l -o -type d \)

また、あなたのディレクトリはcd必須ではありません($go_proj_path_rootアクセス可能なディレクトリであることを確認するために使用しない限り)。

find "$go_proj_path_root" -mindepth 1 -maxdepth 1 \( -type l -o -type d \) -print

または、単一のディレクトリ内のファイルにのみ興味があるようです。

shopt -s nullglob dotglob
for name in "$go_proj_path_root"/*; do
    if [ -d "$name" ] || [ -L "$name" ]; then
        printf '%s\n' "$name"
    fi
done

シェルを含むzsh:

print -rC1 -- $go_proj_path_root/*(ND/) $go_proj_path_root/*(ND@)

...ここで、glob修飾子/@、以前のワイルドカードパターンがそれぞれディレクトリまたはシンボリックリンクのみを一致させ、ND設定オプションとシェルオプションと同じ効果を持ちます(一致しない限り、何も拡張されず、隠された名前も一致します)。結果の名前を単一の列に印刷します(バックスラッシュシーケンスの解釈を防ぐ)。nullglobdotglobbashprint -rC1-r

おすすめ記事