如何粘贴不同目录中同名的文件?

如何粘贴不同目录中同名的文件?

我有另一个问题。

我有三个不同的目录,但里面有相同的文件,具有相同的名称。例如:

目录1:

dir1/file1.txt
dir1/file2.txt
dir1/file3.txt

目录2:

dir2/file1.txt
dir2/file2.txt
dir2/file3.txt

目录3:

dir3/file1.txt
dir3/file2.txt
dir3/file3.txt

我想粘贴具有相同名称的文件。喜欢它:

dir1/file1.txt+ dir2/file1.txt+ dir3/file1.txt=file1.txt

dir1/file2.txt+ dir2/file2.txt+ dir3/file2.txt=file2.txt

dir1/file3.txt+ dir2/file3.txt+ dir3/file3.txt=file3.txt

我该怎么做?

答案1

如果你想连接文件内容,那么你可以这样做

cat dir*/file1 > file1
cat dir*/file2 > file2
cat dir*/file3 > file3

通配符将使 cat 命令读取与该模式匹配的所有目录/文件的内容,因此您将获得写入结果文件的所有三个目录中同名文件的内容。

答案2

假设您只知道目录名称而不知道文件名称,您可以将目录之一的文件名保存在数组中,然后迭代元素,删除目录名称并粘贴每个目录中生成的文件名:

files=(dir3/*)
for p in "${files[@]}"; do 
f=${p#*/}; paste dir1/"$f" dir2/"$f" dir3/"$f" > "$f"; done

请注意,如果使用 glob 让 shell 扩展它,则它可以变得更短(目录名称将按字典顺序使用),例如

for p in "${files[@]}"; do f=${p#*/}; paste dir*/"$f" > "$f"; done

相关内容