Eu tenho outra pergunta.
Tenho três diretórios diferentes, mas tenho os mesmos arquivos, com o mesmo nome. Por exemplo:
Diretório1:
dir1/file1.txt
dir1/file2.txt
dir1/file3.txt
Diretório2:
dir2/file1.txt
dir2/file2.txt
dir2/file3.txt
Diretório3:
dir3/file1.txt
dir3/file2.txt
dir3/file3.txt
Gostaria de colar os arquivos com o mesmo nome. Gosto disso:
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
Como eu posso fazer isso?
Responder1
Se quiser concatenar o conteúdo do arquivo, você pode fazer isso
cat dir*/file1 > file1
cat dir*/file2 > file2
cat dir*/file3 > file3
O curinga fará com que o comando cat leia o conteúdo de todos os diretórios/arquivos que correspondam ao padrão, assim você obterá o conteúdo dos arquivos com o mesmo nome em todos os três diretórios gravados no arquivo resultante.
Responder2
Supondo que você conheça apenas os nomes dos diretórios, mas não os nomes dos arquivos, você pode salvar os nomes dos arquivos de um dos diretórios em uma matriz e, em seguida, iterar sobre os elementos, removendo o nome do diretório e colando o nome do arquivo resultante de cada diretório:
files=(dir3/*)
for p in "${files[@]}"; do
f=${p#*/}; paste dir1/"$f" dir2/"$f" dir3/"$f" > "$f"; done
Observe que ele poderia ser mais curto se um glob fosse usado para que o shell o expandisse (os nomes dos diretórios seriam então usados em ordem lexicográfica), por exemplo
for p in "${files[@]}"; do f=${p#*/}; paste dir*/"$f" > "$f"; done