1

ファイルのあるディレクトリ./srcがあります。にあるファイルを.c除いて、その中のすべてのファイルを抽出したいと思います。私はの亜種を試しました.c./src/test

find ./src -name "*.c" -and -not -name ./src/test

(ここからインスピレーションを得た)が、成功したものはありません。

私は何が間違っているのですか?

4

3 に答える 3

3

使えますgrepか?

find ./src -name \*.c | grep -v ./src/test

于 2012-04-30T17:02:49.587 に答える
3

grep -vパスに改行がないと仮定して、ポストフィルターを使用します(スペースは問題ありません)。

find ./src -name "*.c" | grep -v '/src/test/'

あなたの問題は-name、パスの最後の要素だけを見るということだと思います。そのため、-nameスラッシュが含まれていると、単に機能しません。

お使いのバージョンがfindサポートしている場合は-path、代わりにを使用すると-name機能する可能性があります。

find ./src -name "*.c" -and -not -path './src/test/*'

に変更されたオペランドに注意してください-path

于 2012-04-30T17:04:30.050 に答える
2

-regexパス全体(-name現在のディレクトリのファイル名のみと一致)を一致-pruneさせ、ツリーのその部分を削除する必要があります。

find ./src -regex '^./src/test$' -prune -o -name '*.c' -print0 | xargs -0 ....

findなし-print0は、ほとんどの場合、誰かがスペースを含むファイル名(またはさらに悪いことに改行)を作成した場合に発生するのを待つ問題です。

于 2012-04-30T17:15:47.037 に答える