Как вставить файлы с одинаковыми именами из разных каталогов?

Как вставить файлы с одинаковыми именами из разных каталогов?

У меня есть еще один вопрос.

У меня есть три разных каталога, но внутри них находятся одни и те же файлы с одинаковыми именами. Например:

Каталог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

Обратите внимание, что его можно было бы сделать короче, если бы для его расширения оболочкой использовался глоб (тогда имена каталогов использовались бы в лексикографическом порядке), например:

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

Связанный контент