9

私がすることができます:

$ find .
.
./b
./b/foo
./c
./c/foo

この:

$ find . -type f -exec cat {} \;
This is in b.
This is in c.

しかし、これではありません:

$ find . -type f -exec cat > out.txt {} \;

なぜだめですか?

4

8 に答える 8

29

find の -exec 引数は、ファイルが見つかるたびに、指定したコマンドを 1 回実行します。試す:

$ find . -type f -exec cat {} \; > out.txt

また:

$ find . -type f | xargs cat > out.txt

xargs は、その標準入力を、指定したコマンドのコマンド ライン引数に変換します。ファイル名にスペースが含まれていることが心配な場合は、次を試してください。

$ find . -type f -print0 | xargs -0 cat > out.txt
于 2008-10-03T19:50:08.627 に答える
5

うーん...現在のディレクトリにout.txtを出力すると、findが再帰しているようです

次のようなものを試してください

find . -type f -exec cat {} \; > ../out.txt
于 2008-10-03T20:12:53.683 に答える
3

次のようなことができます:

$ cat `find . -type f` > out.txt
于 2008-10-03T19:53:39.870 に答える
2

すべてのファイルを 1 つの大きなファイルに cat するだけなので、 find の出力をファイルにリダイレクトするだけではどうですか。

find . -type f -exec cat {} \; > /tmp/out.txt
于 2008-10-03T19:52:02.617 に答える
1

>おそらく、他の応答から、 find が引数として取得する前にシンボルがシェルによって解釈されると推測したことでしょう。しかし、「そうしない理由」に答えるために、次のコマンドを見てみましょう。

$ find . -type f -exec cat > out.txt {} \;

したがって、findこれらの引数を指定"." "-type" "f" "-exec" "cat"しています: リダイレクトにこれらの引数を指定しています:"out.txt" "{}"および";". これは、セミコロンで引数をfind終了せず、ファイル名を引数 ("{}") として使用しないことで混乱を招き、リダイレクトも混乱させる可能性があります。-exec

他の提案を見ると、見つけたのと同じディレクトリに出力を作成することは本当に避けるべきです。しかし、それらはそれを念頭に置いて動作します。そして、この-print0 | xargs -0組み合わせは非常に便利です。あなたが入力したかったのは、おそらく次のようなものでした:

$ find . -type f -exec cat \{} \; > /tmp/out.txt

サブディレクトリが 1 レベルしかなく、通常のファイルしかない場合は、次のようなばかげた単純なことを行うことができます。

cat `ls -p|sed 's/\/$/\/*/'` > /tmp/out.txt

ディレクトリにls追加するすべてのファイルとディレクトリを一覧表示'/'し、ディレクトリにseda を追加します'*'。次に、シェルはこのリストを解釈し、グロブを展開します。シェルが処理するファイルが多すぎない場合、これらはすべて引数として cat に渡され、出力は out.txt に書き込まれます。

于 2008-10-03T20:28:16.430 に答える
0

bashであなたはすることができます

cat $(find . -type f) > out.txt

$()を使用すると、コマンドから出力を取得して別のコマンドに渡すことができます

于 2008-10-03T21:29:49.520 に答える
0

これを試して:

(find . -type f -exec cat {} \;) > out.txt 
于 2008-10-03T20:35:38.210 に答える
0

または、本当に優れた Z シェル ( ) を使用している場合は役に立たない検索を省略して、zshこれを行うことができます。

setopt extendedglob

(これはあなたの中にあるはずです.zshrc)次に:

cat **/*(.) > outfile 

ただ動作します:-)

于 2008-10-03T19:58:50.437 に答える