使用分隔符加入目录中的所有文件

时间:2011-09-28 14:10:56

标签: bash unix

我有一个包含数百个文件的目录(每个文件都有几个字符)。我想将它们连接到一个带有分隔符“|”的文件中。

我试过

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

但是这创造了一个无限循环。

3 个答案:

答案 0 :(得分:10)

您可以使用output.txtfind的输出中排除-not -name output.txt(或者正如您在下面的评论中指出的那样,只需将输出文件放在目标目录之外)。 / p>

例如:

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

我也冒昧地用while/cat/echo-exec参数替换你的find,这样我们就可以通过一次{{1}}电话来完成整个事情。

答案 1 :(得分:1)

*要回答问题的标题,因为它是google结果中的第一个(output.txt问题实际上是无关的):

这是我用来加入.jar文件来运行带有lib/中文件的Java应用程序:

EntityManagerStoreImpl

ondra@lenovo:~/work/TOOLS/JawaBot/core$ ls
catalog.xml  nbactions.xml  nb-configuration.xml  pom.xml  prepare.sh  resources  run.sh  sql  src  target  workdir

ondra@lenovo:~/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

答案 2 :(得分:0)

我重用了Ondra的答案,但改为使用绝对路径。

命令:

echo $( \find '/home/user/[path-to-webapp]/WEB-INF/lib' -name '*.jar' -print0) |  \
sed 's#\.jar/#.jar:#g'

注意:我使用#作为sed的分隔符来与列表中的最后一个jar不匹配。

结果:

  

/ home / user / [Web应用程序的路径] /WEB-INF/lib/jar1.jar:home/user/ [Web应用程序的路径] /WEB-INF/lib/jar2.jar [.. 。   所以   上...]:/ home / user / [路径到网络应用] /WEB-INF/lib/last-jar.jar

然后,我可以在javac -classpath命令中使用此输出。