我有另一个问题。
我有三个不同的目录,但里面有相同的文件,具有相同的名称。例如:
目录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