0

108k ファイルを含むディレクトリがあります。RHEL5 で KSH シェルを使用しています

ls *
-dash_bin_ksh: ls: /bin/ls: cannot execute [Argument list too long]

機能しているように見える唯一のコマンドは、find コマンドです。

find .
file 1
file 2 
file n

find と exec オプションを使用して file コマンドを実行しようとしましたが、どこにも行きません。

find . -exec file {}
find: missing argument to `-exec'

私は何が欠けていますか?このディレクトリ内のすべてのファイルに対して file コマンドを実行し、file_output.txt に出力したいだけです。

4

2 に答える 2

6

findのexecの場合、引数をで終了する必要があります\;

次のことも試すことができます。

find . -print0 | xargs -0 file

xargsは、STDINを取得し、各要素(行または区切り文字列)を引数として指定された実行可能ファイルに追加して、実行回数をできるだけ少なくすることで機能します。引数リストは、実行のために--max-chars(128Kibまでのプラットフォームに依存)によってグループに分割されます。

-print0新しい行の代わりにnull文字を追加して、スペースを含むファイル名を安全にします。-0onxargsはnull文字を認識するために使用されます。

-print0および-0はGNU拡張機能であり、汎用性を犠牲にして非GNU環境用に削除できます。

xargsには、各要素に対して実行可能ファイルが実行される場所の-Iように機能させるオプションもあります。find -exec

このテーマに関する深い知識を持ってくれた@glennjackmanに感謝します。

于 2012-11-26T23:32:32.253 に答える
1

\;コマンドの最後にを追加します。例:find . -exec file {} \;

于 2012-11-26T23:33:07.737 に答える