我有一个包含数百个文件的目录(每个文件都有几个字符)。我想将它们连接到一个带有分隔符“|”的文件中。
我试过
find . -type f | (while read line; do; cat $line; echo "|"; done;) > output.txt
但是这创造了一个无限循环。
答案 0 :(得分:10)
您可以使用output.txt
从find
的输出中排除-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
命令中使用此输出。