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