「xargs」コマンドが figlet では動作しないのに、「ls」引数を付けて実行すると正常に動作する理由

「xargs」コマンドが figlet では動作しないのに、「ls」引数を付けて実行すると正常に動作する理由

例えば:

  1. find /usr/share/figlet/ -type f -name "*.flf" | xargs ls -l
    
    -rwxr-xr-x 1 root root  3369 Mar 31 17:54 /usr/share/figlet/Tombstone.flf
    -rwxr-xr-x 1 root root  7641 Mar 31 17:54 /usr/share/figlet/Train.flf
    -rwxr-xr-x 1 root root  8336 Mar 31 17:54 /usr/share/figlet/Trek.flf
    -rwxr-xr-x 1 root root  9363 Mar 31 17:54 /usr/share/figlet/Tubular.flf
    -rwxr-xr-x 1 root root 15484 Mar 31 17:54 /usr/share/figlet/Univers.flf
    -rwxr-xr-x 1 root root  6644 Mar 31 17:54 /usr/share/figlet/usaflag.flf
    
  2. find /usr/share/figlet/ -type f -name "*.flf" | xargs figlet -f
    

最初のコマンドは出力を生成しますが、2 番目のコマンドは出力を生成しません。その理由は何でしょうか?

答え1

私は答えを試みます:

find /usr/share/figlet/ -type f -name "*.flf" | xargs -n 1 figlet -f

これは実行されます1つfigletコマンド1つファイル名、別のファイル名を指定した別の figlet コマンド、などです。

例えば、

find /usr/share/figlet/ -type f -name "*.flf" | xargs -t ls -l

そして

find /usr/share/figlet/ -type f -name "*.flf" | xargs -t -n 1 ls -l

(ちなみに、私は xargs に常に '-r' を含めています。これにより、入力がない場合には xargs が実行されなくなります。そうしないと、混乱を招く空行が表示されます。)

関連情報