下記のようにfindに-print0、xargsに-0を付けることで、ファイルやディレクトリの名前に半角スペースが含まれていてもxargsに期待通りのパスを渡せます。
find -print0 | xargs -x grep hoge
findの-print0はファイル名の区切りを通常は改行コード\nなところを空文字\0にするオプションです。
xargsの-xは通常はスペースではなく空文字を区切として入力を受け取るオプションです。
上記の組み合わせによりスペースを含むパスにスペースが入っていても処理が可能になります。
パスに改行が含まれる場合は更に工夫が必要らしいですが、「grep: ファイル名: そのようなファイルやディレクトリはありません」と意図せぬ探索をするスペースの問題を解決できたので一旦良しとします。
POSIX準拠シェルスクリプトでfind -print0やxargs -0を使わずにスペースや改行が含まれたファイル名を処理する
特定の文字列を含むファイルを探したいときに、下記のようなコマンドを組んで探す際に便利です。
find -type f -not -path "*/.git/*" -not -path "*/.pio/*" -not -path "*/.vscode/*" -print0 | xargs -0 grep 探したい文字列
参考
シェルスクリプトで名前にスペース(空白)を含むファイルがxargsでうまく処理できない場合の対処
xargs fails when a filename contains white space

0 件のコメント :
コメントを投稿