Bash 使用分隔符连接目录中的所有文件
我有一个包含数百个文件的目录(每个文件有几个字符)。我想用分隔符“|”将它们合并到一个文件中 我试过了Bash 使用分隔符连接目录中的所有文件,bash,unix,Bash,Unix,我有一个包含数百个文件的目录(每个文件有几个字符)。我想用分隔符“|”将它们合并到一个文件中 我试过了 find . -type f | (while read line; do; cat $line; echo "|"; done;) > output.txt 但是这创建了一个无限循环。您可以使用-not-name output.txt将output.txt从find的输出中排除(或者正如您在下面的注释中指出的,只需将输出文件放在目标目录之外) 例如: find . -type f
find . -type f | (while read line; do; cat $line; echo "|"; done;) > output.txt
但是这创建了一个无限循环。您可以使用
-not-name output.txt
将output.txt
从find
的输出中排除(或者正如您在下面的注释中指出的,只需将输出文件放在目标目录之外)
例如:
find . -type f -not -name output.txt -exec cat {} \; -exec echo "|" \; > output.txt
我还冒昧地用几个
-exec
参数替换了while/cat/echo
,这样我们就可以使用一个查找调用来完成整个过程。*来回答问题的标题,因为这是google结果中的第一个问题(output.txt问题实际上是无关的):
这就是我用来连接.jar
文件来运行Java应用程序的方法,其中包含lib/
中的文件:
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
我重复了Ondra的答案,但使用了绝对路径
命令:
echo $( \find '/home/user/[path-to-webapp]/WEB-INF/lib' -name '*.jar' -print0) | \
sed 's#\.jar/#.jar:#g'
注意:我使用#
作为sed
的分隔符来与列表中的最后一个jar不匹配
结果:
/home/user/[path to webapp]/WEB-INF/lib/jar1.jar:home/user/[path to webapp]/WEB-INF/lib/jar2.jar[。。。
诸如此类
在…]上:/home/user/[webapp路径]/WEB-INF/lib/last-jar.jar
然后,我可以在javac-classpath
命令中使用这个输出。啊,谢谢你的指针。这对我来说很有效find-键入f |(在读取行时;do;cat$line;echo“|”done;)>../output.txt
@Dogbert这将起作用:)。顺便说一句,您不需要在do
后面加分号,即(在读取行时;do cat$line;echo“|”;done;)