首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从所有子目录合并同名的txt文件

如何从所有子目录合并同名的txt文件
EN

Unix & Linux用户
提问于 2022-01-20 13:38:22
回答 2查看 1.1K关注 0票数 2

我有很多文件的文件夹,每个文件夹都有同名的txt文件,我希望将所有子目录中的所有txt文件合并到一个文件夹中。

示例:

代码语言:javascript
运行
复制
/home/parent/Folder1 ===> txtfile1.txt, txtfile2.txt, txtfile3.txt
/home/parent/Folder2 ===> txtfile1.txt, txtfile2.txt, txtfile3.txt
/home/parent/Folder3 ===> txtfile1.txt, txtfile2.txt, txtfile3.txt

我想将所有同名的文件合并到不同的文件夹中。

代码语言:javascript
运行
复制
/home/parent/Merged ===> txtfile1.txt, txtfile2.txt, txtfile3.txt
EN

回答 2

Unix & Linux用户

发布于 2022-01-20 14:09:53

您可以使用这个:

代码语言:javascript
运行
复制
mkdir "/home/parent/MERGED"
find "/home/parent/Folder1" -type f -name '*txt' -printf '%f\0' | 
xargs -0 -I FILENAME find "/home/parent" ! -path '/home/parent/MERGED/*' \
-type f -name FILENAME\
-exec sh -c 'cat "$1" >> "/home/parent/MERGED/$2"' sh {} FILENAME \;

它所做的:

  • 创建目标目录
  • 扫描FOLDER1并打印文件名(无路径),然后以NUL作为分隔符
  • 使用xargs阅读此列表
  • 每输入名称运行一次find,并扫描parent以查找具有该名称的文件
  • 将目标目录排除在此搜索之外。
  • 将结果发现连接到与给定名称合并的文件中。

注意:输出文件中的数据不一定按FOLDER1、FOLDER2等的名称排序,而是按find检索文件的方式排序。

Note2:绝对路径是正确过滤合并目录的必要条件。

票数 0
EN

Unix & Linux用户

发布于 2022-01-20 17:01:58

使用zsh

代码语言:javascript
运行
复制
cd /home/parent && mkdir -p Merged || exit
typeset -A files
for file (Folder*/*.txt(nN)) files[$file:t]+=$file注意,n glob限定符将数字排序应用于glob展开,例如,Folder2在Folder10之前,txtfile1.txt在txtfile10.txt之前。请注意,隐藏的文件被跳过。如果希望它们也合并,请添加D glob限定符。\0'
for file (${(k)files}) cat -- ${(0)files[$file]} > Merged/$file

注意,D2 glob限定符将数字排序应用于glob展开,例如,D3D4之前,D5D6之前。

请注意,隐藏的文件被跳过。如果希望它们也合并,请添加D7 glob限定符。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/687192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档