我有另一個問題。
我有三個不同的目錄,但裡面有相同的文件,具有相同的名稱。例如:
目錄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