#navi(../)
* 空白を含むファイル名のファイルをfindとxargsの組み合わせで処理する方法 [#a12c8f18]
スペースを含むファイル名のファイルをfind, xargsを使用して処理する方法を以下に記します。
#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
* 関連記事 [#w91591c8]
-[[findで検索したファイルを削除したい>逆引きUNIXコマンド/findで検索したファイルを削除したい]]
-[[空白を含むファイル名のファイルをfindとxargsの組み合わせで処理する方法>逆引きUNIXコマンド/空白を含むファイル名のファイルをfindとxargsの組み合わせで処理する]]
-[[ファイルを探す・findコマンド>逆引きUNIXコマンド/ファイルを探す・findコマンド]]
-[[指定サイズより大きいファイルを探す・findコマンド>逆引きUNIXコマンド/指定サイズより大きいファイルを探す・findコマンド]]
-[[指定したユーザーが作成したファイル一覧を表示する・find>逆引きUNIXコマンド/指定したユーザーが作成したファイル一覧を表示する・find]]
-[[空っぽのディレクトリ一覧を検索する方法・find>逆引きUNIXコマンド/空っぽのディレクトリ一覧を検索する方法・find]]
-[[指定した時間前に作成したファイル一覧を表示する方法・find>逆引きUNIXコマンド/指定した時間前に作成したファイル一覧を表示する方法・find]]
-[[findコマンドの-printオプションについて>逆引きUNIXコマンド/findコマンドの-printオプションについて]]
* findコマンドとxargsコマンド [#w409fdf9]
''find''コマンドと''xargs''コマンドの組み合わせで、複数のファイルをまとめて処理することはLinuxでのファイル処理の基本です。~
以下のコマンドはuser0のホームディレクトリのすべてのテキストファイルの行数を数えています。
% find /home/user0 -name \*.txt -print | xargs wc -l
29 /home/user0/hoge.txt
15 /home/user0/gere.txt
44 合計
%
* 空白を含むファイル名 [#i47cae51]
しかし、以下のようにファイル名に空白を含むものがあった場合、このコマンドは失敗します。~
findとxargsは空白を複数ファイルのリストの区切りとして扱っているために、~
空白を含むファイルの受け渡しに失敗するのです。
% ls -l /home/user0/*.txt
-rw-rw-r-- 1 user0 user0 552 8月 1 20:13 /home/user0/gere.txt
-rw-rw-r-- 1 user0 user0 1300 8月 1 20:13 /home/user0/hoge hoge.txt
%
% find /home/user0 -name \*.txt -print | xargs wc -l
wc: /home/user0/hoge: そのようなファイルやディレクトリはありません
wc: hoge.txt: そのようなファイルやディレクトリはありません
15 /home/user0/gere.txt
15 合計
%
* findの -print0 オプション、xargsの -0 オプション [#ye1c48db]
このような場合には、findの-printオプションの代りに、''-print0''オプションを使い、xargsには''-0''オプションを追加します。
% find /home/user0 -name \*.txt -print0 | xargs -0 wc -l
29 /home/user0/hoge hoge.txt
15 /home/user0/gere.txt
44 合計
%
このオプションを使用すると、ファイルのリストの区切り文字に空白ではなく\\0(ヌル文字)という制御文字を使用します。~
これにより空白を含むファイル名も正常に扱うことができます。~
もちろん、このオプションを使って通常のファイル(空白を含んでいないファイル名のファイル)を対象とした処理を行っても、問題は生じません。
以上、空白を含むファイルをfindとxargsの組み合わせで処理する方法についてでした。
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)