【linux】 スペースを含むファイル名を find | xargs で使う方法
問題
find して xargs に渡す方式でコマンドを実行したいのですが、
スペースを含むファイル名があると「そのようなファイルやディレクトリはありません(No such file or directory)」と言われてしまいます。
どうしたらよいですか。
答え
find が -print すると、ファイル名が改行区切りになり、xargs は空白や改行を区切り文字として認識する。
find と xargs の区切り文字をヌル文字にしてやると、空白を含むファイル名が分割されないようになる。
find には -print0 、xargs には -0 または –null を指定する。
例)
find . -name *.log -print0 | xargs -0 grep 'hoge'
findは-print0でヌル文字区切りで出力し、xargsは-0でヌル文字を区切り文字として処理する。
コメント