2011-09-28 29 views
6

私は数百のファイル(それぞれに複数の文字を含む)を含むディレクトリを持っています。私はそれらをセパレータ "|"で1つのファイルに結合したいと思います。ディレクトリ内のすべてのファイルを区切り記号で区切ります。

私は

find . -type f | (while read line; do; cat $line; echo "|"; done;) > output.txt 

を試してみましたしかし、それは無限ループを作成しました。

答えて

9

-not -name output.txtを使用してfindの出力からoutput.txtを除外することができます(または、以下のコメントで既に指摘したように、出力ファイルをターゲットディレクトリの外に置くだけです)。例えば

find . -type f -not -name output.txt -exec cat {} \; -exec echo "|" \; > output.txt 

私はまた、我々は、単一のfindコールを使用して全体のことを行うことができますので、-execのparamsのカップルとあなたのwhile/cat/echoを交換する自由を撮影しました。

+0

ああ、ポインタに感謝。これは私のために働いた 'find。タイプf | (読んだ行; do; cat $ line; echo "|"; done;)> ../ output.txt' – Dogbert

+0

@Dogbertそれはうまくいくでしょう:)。ところで、 'do'の後にセミコロンは必要ありません。'(while read line; do cat $ line; echo "|"; done;) ' –

+0

私はUNIXを学んでいるだけです。 – Dogbert

0

*それは(output.txtと、問題は実際には関係ありません)Googleの検索結果の最初なので、質問のタイトルに答えるために:

これは私がファイルをJavaアプリケーションを実行するために.jarファイルを結合するために使用するものですlib/に:

EntityManagerStoreImpl

[email protected]:~/work/TOOLS/JawaBot/core$ ls 
catalog.xml nbactions.xml nb-configuration.xml pom.xml prepare.sh resources run.sh sql src target workdir 

[email protected]:~/work/TOOLS/JawaBot/core$ echo `ls -1` | sed 's/\W/:/g' 
catalog:xml:nbactions:xml:nb:configuration:xml:pom:xml:prepare:sh:resources:run:sh:sql:src:target:workdir 

ファイルリストはfind ...か何かに置き換えてもよいことは勿論です。
echoは改行をスペースで置き換えるためのものです。

最終形態:

java -cp $(echo `ls -1 *.jar` | sed 's/\W/:/g') com.foo.Bar 
関連する問題