首页 > 解决方案 > Bash 命令以查找通用文件名并对其内容进行分类

问题描述

您好,我有 3 个目录,例如:

/path1/path2/pathA/path4/

1_to_45.txt 
 ABC
1_to_46.txt
 DEF
1_to_47.txt 
 GHI

/path1/path2/pathB/path4/

1_to_45.txt 
 JKL
1_to_48.txt
 MNO
1_to_47.txt 
 PQR

/path1/path2/pathC/path4/

1_to_45.txt 
 STW
1_to_49.txt
 XYZ
1_to_47.txt 
 AUI
1_to_41.txt 
 IOP

我想将 3 个目录之间共有的所有文件包含到目录中,并创建与 comme文件名Merged_directory相同的文件 ,因此例如 3 个目录之间有两个共同文件:

/path1/path2/Merged_directory

    1_to_45.txt
        ABC
        JKL
        STW
    1_to_47.txt
        GHI
        PQR
        AUI
        
    
      

有人有想法吗?

标签: linuxbashfiledirectory

解决方案


循环遍历一个目录中的文件名。检查其他两个目录中是否也存在相应的名称。如果是这样,请将它们全部放入合并目录中。

dir1=/path1/path2/pathA/path4
dir2=/path1/path2/pathB/path4
dir3=/path1/path2/pathC/path4
merged=/path1/path2/Merged_directory
for file in "$dir1"/*.txt
do
    fn=${file##*/}
    if [ -f "$dir2/$fn" ] && [ -f "$dir3/$fn" ]
    then
        cat "$fn" "$dir2/$fn" "$dir3/$fn" > "$merged/$fn"
    fi
done

推荐阅读