Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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_Shell_Command Line - Fatal编程技术网

Bash 跨数百个目录连接数千个文本文件(同时保留一些结构)

Bash 跨数百个目录连接数千个文本文件(同时保留一些结构),bash,shell,command-line,Bash,Shell,Command Line,我有一组分布在400多个目录中的纯文本文件,其中包含大量子目录。大约有30万个文本文件。例如: directory1/subdirectory1 directory1/subdirectory2 directory1/subdirectory1/subdirectory3 directory1中的所有文本文件都应该以一个名为directory1.txt的大型文本文件结束。然后用directory2重复上述操作 以这种方式进入这四百个目录中的每一个目录并组合所有文本文件,最快捷、最简单的方法是什

我有一组分布在400多个目录中的纯文本文件,其中包含大量子目录。大约有30万个文本文件。例如:

directory1/subdirectory1
directory1/subdirectory2
directory1/subdirectory1/subdirectory3
directory1
中的所有文本文件都应该以一个名为
directory1.txt
的大型文本文件结束。然后用
directory2
重复上述操作

以这种方式进入这四百个目录中的每一个目录并组合所有文本文件,最快捷、最简单的方法是什么

我知道我可以去四百个目录中的每一个,使用诸如
find
之类的命令将所有文本文件合并到一个目录中,然后使用
cat*.txt>>all.txt
,但肯定有一种简单的方法来自动化这个过程吗

必须有一个简单的方法来自动化这个过程

你为什么要找一个?这是一次性活动还是你要不时重复

我只想说做一些简单的事情:

for ff in `find . -maxdepth 1 -type d`
do
    find "$ff" -type *.txt -exec cat {} \; >> "$ff.txt"
done
必须有一个简单的方法来自动化这个过程

你为什么要找一个?这是一次性活动还是你要不时重复

我只想说做一些简单的事情:

for ff in `find . -maxdepth 1 -type d`
do
    find "$ff" -type *.txt -exec cat {} \; >> "$ff.txt"
done

我已经在我的系统上测试过了,它工作得完美无缺。你可能想把它调整到你的参数,但在一行我做了你需要的一切

for I in `ls -dR */`; do cat $I/* > $I.txt; done
您可能需要将ls命令更改为仅搜索文本文件,否则也将获得二进制数据。享受

for I in `ls -dR */*.txt`; do cat $I/* > $I.txt; done

我已经在我的系统上测试过了,它工作得完美无缺。你可能想把它调整到你的参数,但在一行我做了你需要的一切

for I in `ls -dR */`; do cat $I/* > $I.txt; done
您可能需要将ls命令更改为仅搜索文本文件,否则也将获得二进制数据。享受

for I in `ls -dR */*.txt`; do cat $I/* > $I.txt; done

要连接子树中的所有txt文件,请执行以下操作:

#!/bin/sh
# Usage: cat-txt dirname
find "$1" -name \*.txt -print0 | xargs -0 cat >> "$1.txt"
在所有直接子目录上调用
cat txt

$ find -mindepth 1 -maxdepth 1 -type d -exec cat-txt '{}' \;

要连接子树中的所有txt文件,请执行以下操作:

#!/bin/sh
# Usage: cat-txt dirname
find "$1" -name \*.txt -print0 | xargs -0 cat >> "$1.txt"
在所有直接子目录上调用
cat txt

$ find -mindepth 1 -maxdepth 1 -type d -exec cat-txt '{}' \;

这很有帮助,谢谢。理想情况下,我想要一个解决方案,我可以重复进一步的数据集-但这是相当简单的!无论你的船航行的是什么。进行测试,我现在没有连接到任何unix设备。我担心
-exec cat{}\>>可能有问题$outFile
,虽然我现在觉得还可以。的帮助并没有显示每个语法的
<代码>查找-类型d-prune
仅打印
。你可以用。即使
find…prune
会打印目录,它也会在带有空格的目录(或
IFS
中的其他字符)上断开<代码>{}可能需要转义。@J.F.Sebastian谢谢。更新<代码>{}不需要在命令行bash上引用/转义。它不解决“名称中的空格”问题和
查找-maxdepth 1-类型d
包括输出中的
。这很有帮助,谢谢。理想情况下,我想要一个解决方案,我可以重复进一步的数据集-但这是相当简单的!无论你的船航行的是什么。进行测试,我现在没有连接到任何unix设备。我担心
-exec cat{}\>>可能有问题$outFile
,虽然我现在觉得还可以。的帮助并没有显示每个语法的
<代码>查找-类型d-prune
仅打印
。你可以用。即使
find…prune
会打印目录,它也会在带有空格的目录(或
IFS
中的其他字符)上断开<代码>{}可能需要转义。@J.F.Sebastian谢谢。更新<代码>{}不需要在命令行bash上引用/转义。它不解决“名称中的空格”问题和
查找-maxdepth 1-类型d
包括输出中的
,这看起来很有希望,但对我来说不太管用-我收到了一系列错误消息,例如:
cat:ABbenevolat//05-02-11:是目录cat:ABbenevolat//05-04-26:是目录cat:ABpresse//francossection:是目录
——文件本身没有被破坏,只是创建了额外的.txt文件。我可能搞乱了一些显而易见的东西,我只是在学习bash..它不会列出嵌套目录中的文件。如果文件名或目录中有空格,则会中断。嗯,这看起来很有希望,但对我来说不太管用-我收到了一系列错误消息,例如:
cat:ABbenevolat//05-02-11:是目录cat:ABbenevolat//05-04-26:是目录cat:ABpresse//francossection:是目录
——文件本身没有被破坏,只是创建了额外的.txt文件。我可能搞乱了一些显而易见的东西,我只是在学习bash..它不会列出嵌套目录中的文件。如果文件名或目录中有空格,或
find“$1”-name\*.txt-exec cat{}+>>“$1.txt”
find“$1”-name\*.txt-exec cat{}+>>“$1.txt”