[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:54601] Re: tmpreaperの使い方



さとうふみやす @ OSSTech です。

At Thu, 28 Oct 2010 00:00:53 +0900,
KISE Hiroshi wrote:
> > findでファイル操作っていうのは、意外で想像できませんでした。
> 
> findは検索だけで、あとの処理は他のコマンドにおまかせする、なんて
> こともできます。findはxargsとペアで使われることが多いので、
> 覚えておくとよいかも。
> 
> $ find . -name '*.avi' | xargs file

安全のため、find には -print0 を、xargs には -0r
(--null --no-run-if-empty) オプションを利用することを推奨します。

  $ find . -name '*.avi' -print0 |xargs -0r file

安全でない例1:

  $ find . -name '存在しないファイル名パターン' |xargs file
  Usage: file [-bchikLNnprsvz0] [--apple] [--mime-encoding] [--mime-type]
              [-e testname] [-F separator] [-f namefile] [-m magicfiles] file ...
         file -C [-m magicfiles]
         file [--help]

この場合、以下なら file が引数なしで実行されない:

  $ find . -name '存在しないファイル名パターン' |xargs -r file

安全でない例2:

  準備と確認:
  $ mkdir find-xargs-demo-2
  $ cd find-xargs-demo-2
  $ touch foo 'bar baz'
  $ mkdir -p 'trap /etc/passwd'
  $ find . -ls
  5915152    4 drwxrwsr-x   3 fumiyas  fumiyas      4096 10月 28 00:16 .
  5915160    0 -rw-rw-r--   1 fumiyas  fumiyas         0 10月 28 00:15 ./bar\ baz
  5915155    4 drwxrwsr-x   3 fumiyas  fumiyas      4096 10月 28 00:16 ./trap\
  5915156    4 drwxrwsr-x   3 fumiyas  fumiyas      4096 10月 28 00:16 ./trap\ /etc
  5915158    4 drwxrwsr-x   2 fumiyas  fumiyas      4096 10月 28 00:16 ./trap\ /etc/passwd
  5915159    0 -rw-rw-r--   1 fumiyas  fumiyas         0 10月 28 00:15 ./foo

  これは期待通りに動かない:
  $ find . -name "*" |xargs file
  .:           setgid directory
  ./bar:       ERROR: cannot open `./bar' (No such file or directory)
  baz:         ERROR: cannot open `baz' (No such file or directory)
  ./trap:      ERROR: cannot open `./trap' (No such file or directory)
  ./trap:      ERROR: cannot open `./trap' (No such file or directory)
  /etc:        directory
  ./trap:      ERROR: cannot open `./trap' (No such file or directory)
  /etc/passwd: ASCII text
  ./foo:       empty

  これなら大丈夫:
  $ find . -name "*" -print0 |xargs -0 file
  .:                  setgid directory
  ./bar baz:          empty
  ./trap :            setgid directory
  ./trap /etc:        setgid directory
  ./trap /etc/passwd: setgid directory
  ./foo:              empty

-- 
-- Name: SATOH Fumiyasu (fumiyas @ osstech co jp)
-- Business Home: http://www.OSSTech.co.jp/
-- Personal Home: http://www.SFO.jp/blog/