stderrをgrepする方法? [コピー]

stderrをgrepする方法? [コピー]

ワイルドカードを含むこのコマンドをどのように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

ワイルドカードはそれとは何の関係もなくgrepgrepパイプで接続された内容だけを見ることができます。ワイルドカードはシェルによって拡張され、拡張されたファイルのリストは渡されます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リンクのターゲットがリンクかどうかをテストするため、ダングリングリンクに対してのみ動作します。

おすすめ記事