mac:连接多个目录中的文本文件的内容;将目录名称附加到相应的文本文件内容

mac:连接多个目录中的文本文件的内容;将目录名称附加到相应的文本文件内容

目录结构如下:

目录1 -
子目录A
---文件A.txt -
子目录B
---文件B.txt
子目录C
---文件C.txt

我想生成一个包含以下连接文本的文本文件:

子目录 A 的名称
- 文件 A.txt 中包含的文本
子目录 B 的名称 -
文件 B.txt 中包含的文本
子目录 C 的名称
- 文件 C.txt 中包含的文本

我能够使用以下命令来获取连接的文本文件的内容,但我需要目录名称来组织输出的信息:

find ./prefix_common_to_all_target_directories* -name "*.txt" -exec cat '{}' \; > concatenated_extracted_info.txt

答案1

#!/bin/bash
while read mydir; do
    echo "${mydir}:" >> output.txt
    cat $mydir/*.txt >> output.txt
done < <(find test* -type d )

这将循环遍历其中的所有目录directory1并执行您想要的操作。请注意,您必须在 内运行此脚本directory1


一些解释:

首先find test* -type d运行,每行打印每个子目录的名称。然后,此输出被输入到循环read mydir中,while每行运行一次($mydir分配给每一行(又名子目录名称))。
然后,循环中的第一行将目录名称后跟冒号写入output.txt,使用>>表示“附加到文件”(如果文件不存在,则将创建该文件)。循环中的第二行将子目录中
每个文件的内容写入,同样处于“附加模式”。*.txtoutput.txt


我的测试设置(将上述脚本保存为createfile.sh):

$ ls *
test1:
fileA.txt

test2:
fileB.txt

test3:
fileC.txt
$ bash createfile.sh
$ cat output.txt 
test1:
file content from dir1
test2:
test content from dir2
test3:
test content from dir3

相关内容