ワイルドカードを含むこのコマンドをどのようにgrepしますか?
グレップはどうしますか?標準エラー?
grepは何もしないようです:
$ less /Users/raine/.nvm/versions/node/v5.5.0/lib/node_modules/* | grep "Not a file"
/Users/raine/.nvm/versions/node/v5.5.0/lib/node_modules/truffle is a directory
/Users/raine/.nvm/versions/node/v5.5.0/lib/node_modules/wunderline is a directory
/Users/raine/.nvm/versions/node/v5.5.0/lib/node_modules/yo is a directory
これはlessを非常に悪く使うことなので、おそらく別の質問をする価値があるでしょう。しかし、私の目的は、このディレクトリで壊れたシンボリックリンクを見つけることです。やはり有効is a directory
であれば、Not a file or directory
有効でなければ少ない量が印刷されます。ワイルドカード演算子stderrの私の理解不足を示すので、とにかく尋ねる価値があると思いました。
ベストアンサー1
ワイルドカードはそれとは何の関係もなくgrep
、grep
パイプで接続された内容だけを見ることができます。ワイルドカードはシェルによって拡張され、拡張されたファイルのリストは渡されますless
。したがって、この質問はそれとはまったく関係ありませんgrep
。
つまり、壊れたリンクを探している場合は、次のことができます。
for f in /Users/raine/.nvm/versions/node/v5.5.0/lib/node_modules/*; do
[ -e $(readlink -f "$f") ] || echo "$f";
done
これは、リンク内のすべてのファイルとディレクトリを繰り返して、宛先が存在することを/Users/raine/.nvm/versions/node/v5.5.0/lib/node_modules/
確認し(readlink
ファイルがリンクでない場合はiotを実行するファイル名を印刷)、存在しない場合は名前を印刷します。
私にとってより良いソリューション今学んだ例:
find /Users/raine/.nvm/versions/node/v5.5.0/lib/node_modules/ -xtype l
この場合、-xtype
リンクのターゲットがリンクかどうかをテストするため、ダングリングリンクに対してのみ動作します。