findコマンドで使用できる「xargs」。
findeでxargsを使用する際にxargsへの標準入力が空だった場合にどのような動作になるのか確認してみましょう。
カレントディレクトリは「/」です。「/tmp/kamo」配下に「tora1」というファイルを格納しました。
1 2 3 4 5 6 |
# pwd / # ls -l /tmp/kamo/ total 0 -rw-r--r-- 1 root root 0 Jan 9 17:22 tora1 # |
まずはファイルが存在する場合の動作です
1 2 3 4 |
# find /tmp/kamo/tora1 -type f |xargs ls -l -rw-r--r-- 1 root root 0 Jan 9 17:22 /tmp/kamo/tora1 # |
続いてファイルが存在しない場合の動作です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# find /tmp/kamo/tora2 -type f |xargs ls -l find: ‘/tmp/kamo/tora2’: No such file or directory total 68 lrwxrwxrwx. 1 root root 7 Sep 19 2019 bin -> usr/bin dr-xr-xr-x. 5 root root 4096 Sep 26 2019 boot drwxr-xr-x 20 root root 5400 Apr 14 2021 dev drwxr-xr-x. 106 root root 12288 Dec 6 10:44 etc drwxr-xr-x. 4 root root 4096 Dec 15 2019 home lrwxrwxrwx. 1 root root 7 Sep 19 2019 lib -> usr/lib lrwxrwxrwx. 1 root root 9 Sep 19 2019 lib64 -> usr/lib64 drwx------. 2 root root 16384 Sep 19 2019 lost+found drwxr-xr-x. 2 root root 4096 Apr 11 2018 media drwxr-xr-x. 2 root root 4096 Apr 11 2018 mnt drwxr-xr-x. 7 root root 4096 Nov 13 15:58 opt dr-xr-xr-x 132 root root 0 Jun 21 2020 proc dr-xr-x---. 14 root root 4096 Jan 4 22:13 root drwxr-xr-x 37 root root 1180 Jan 9 14:56 run lrwxrwxrwx. 1 root root 8 Sep 19 2019 sbin -> usr/sbin drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv dr-xr-xr-x 13 root root 0 Oct 11 2020 sys drwxrwxrwt. 10 root root 4096 Jan 9 17:23 tmp drwxr-xr-x. 13 root root 4096 Sep 19 2019 usr drwxr-xr-x. 21 root root 4096 Dec 15 2019 var # |
「find: ‘/tmp/kamo/tora2’: No such file or directory」という出力の後、lsコマンドの結果が出力されています。
カレントディレクトリが「/」のため、ここで出力された内容はカレントディレクトリで「ls -l」コマンドを実行したときの内容になります。
紛らわしいですね。
これは、xargsコマンドの「–no-run-if-empty」オプションを使用すれば回避できます。
試してみます。
1 2 3 4 |
# find /tmp/kamo/tora2 -type f |xargs --no-run-if-empty ls -l find: ‘/tmp/kamo/tora2’: No such file or directory # |
さきほど出力された「/」でのlsの結果が出力されなくなりました。
なお、「–no-run-if-empty」の位置をコマンドの後ろにすると以下のようにエラーになります。
1 2 3 4 5 |
# find /tmp/kamo/tora2 -type f |xargs ls -l --no-run-if-empty find: ‘/tmp/kamo/tora2’: No such file or directory ls: unrecognized option '--no-run-if-empty' Try 'ls --help' for more information. # |
あくまでもxargsコマンドのオプションなので、xargsの直後に配置する必要があるわけですね。