1

これを使用して、毎回異なるファイルを引数としてスクリプトをn回実行しようとしていました:

ls /user/local/*.log | xargs script.pl

(script.pl は引数としてファイル名を受け入れます)

ただし、スクリプトは 1 回だけ実行されます。これを解決するには?私はそれを正しくしていませんか?

4

3 に答える 3

2
 ls /user/local/*.log | xargs -rn1 script.pl

あなたのスクリプトは1つのパラメータしか期待していないと思います.xargsにそれを伝える必要があります.

-r を渡すと、入力リストが空になる場合に役立ちます

一般的には、次のような方がよいことに注意してください。

 find /user/local/ -maxdepth 1 -type f -name '*.log' -print0 |
       xargs -0rn1 script.pl

引用符とディレクトリをより安全に処理します。


xargs が実際に実行する内容を確認するには、-tフラグを使用します。

于 2011-06-30T21:36:01.087 に答える
0

lsこれは多くのシステムでエイリアスであることが多いため、使用は避けます。たとえば、ls色付きの出力を生成する場合、これは機能しませんls。do ls $ i; done

むしろ、シェルにワイルドカードを展開させることができます。fori in /usr/local/*.log; script.pl$iを実行します。終わり

于 2011-07-01T11:30:12.903 に答える
0

これが役立つことを願っています:

for i in $(ls /usr/local/*.log)
do
  script.pl $i
done
于 2011-07-01T00:54:28.173 に答える