Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用分隔符连接目录中的所有文件_Bash_Unix - Fatal编程技术网

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;)