![mac:连接多个目录中的文本文件的内容;将目录名称附加到相应的文本文件内容](https://linux22.com/image/1570696/mac%EF%BC%9A%E8%BF%9E%E6%8E%A5%E5%A4%9A%E4%B8%AA%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%9B%E5%B0%86%E7%9B%AE%E5%BD%95%E5%90%8D%E7%A7%B0%E9%99%84%E5%8A%A0%E5%88%B0%E7%9B%B8%E5%BA%94%E7%9A%84%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9.png)
目录结构如下:
目录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
,使用>>
表示“附加到文件”(如果文件不存在,则将创建该文件)。循环中的第二行将子目录中
每个文件的内容写入,同样处于“附加模式”。*.txt
output.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