如何貼上不同目錄中同名的檔案?

如何貼上不同目錄中同名的檔案?

我有另一個問題。

我有三個不同的目錄,但裡面有相同的文件,具有相同的名稱。例如:

目錄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

相關內容