- 2009年10月 2日 12:08
- Linux -リナックス-
Marsチームです。
今回はLinuxのコマンドについてです。
「xargs(えっくすあーぐす)」コマンド
xargsは、標準入力から渡されたファイル名などを引数とみなして
別のコマンドの引数として起動します。
使い方によっては、とても便利なコマンドなんです。
いくつか使用例を紹介します。
【便利な使い方1 chmodコマンドで大量ファイルのアクセス権を変更する場合】
findで見つけたファイルのアクセス権を変更したい場合、
findコマンドとchmodコマンドを組み合わせて変更することができます。
$ chmod 666 `find . -name "*.jpg"`
(バッククォーテーションでかこってね)
このように処理をすると、カレントディレクトリ以下にある
「何とか.jpg」というファイルを検索し、アクセス権を666に変更します。
ただ、この方法だとファイルの数が多すぎる場合、
うまく処理が行えずエラーが出てしまうことがあります。
$ bash: /bin/chmod: Argument list too long ←こんなエラー
とか
$ -bash: /bin/chmod: 引数リストが長すぎます ←こんな感じのエラー
このような場合に、xargsコマンドを使用すると問題を解決することができます。
$ find . -name "*.jpg" | xargs chmod 666
しかし、この方法でもうまくいかない場合があります。
例えば、ファイル名にスペースが入っている場合です。
なぜスペースが入っているとうまくいかないのかというと、
xorgsコマンドはスペースやタブ、改行が入っていた場合、
区切り文字となってしまい複数のファイルに分割されてしまいます。
具体的に例として挙げるとすると
「./Hello omiya」というファイルがあったとします。
xorgsコマンドにの認識は「./Hello」と「omiya」になってしまい、
うまく処理が行えません。
そんな時は、findコマンドに「-print0」オプションを使用することにより、
問題を解決することができます。
「-print0」オプションを使用すると、区切り文字がスペースから
「\0(バックスペース+ゼロ)」に変更されます。
さらに、xargsコマンドは、「-0」オプションを使用した場合「\0」を
区切り文字として扱います。
$ find . -name "*.jpg" -print0 | xargs -0 chmod 666
【便利な使い方2 mvコマンドとの組み合わせ】
「mv」コマンドの場合、引数に移動先のディレクトリを指定する必要があるので、
xargsコマンドが使えなさそうな感じがするのですが、実は使用することができます。
$ find . -name "*.jpg" -print0 | xargs -0 mv -t /tmp
mvコマンドに、「-t」オプションと組み合わせることによって
使用することができます。
「-t」オプションは、xargsコマンドと組み合わせて使うためのオプションとなります。
【便利な使い方3 rmコマンドとの組み合わせ】
こんな感じで組み合わせると、大量のファイルも一括で削除できます。
$ find . -name "*.jpg" -print0 | xargs -0 rm -f
その他にもいろいろな組み合わせがあると思います。
ぜひお試しあれ!
--------------------------------------------------------------------------------
パソコンスクール KENスクール大宮校 NetWorkインストラクター
http://www.kenschool.jp/school/omiya/index.html
KENスクールでLinuxを学びたい方は、Network講座へ!
http://www.kenschool.jp/Network/index.html
- 次の記事へ: なぜ今XMLDBなのか
- 前の記事へ: Eclipseを使ってiアプリ開発!!【第4回】
