У меня есть еще один вопрос.
У меня есть три разных каталога, но внутри них находятся одни и те же файлы с одинаковыми именами. Например:
Каталог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