Questo one-liner Perl visualizzerà le rinominazioni necessarie:
perl -e 'open $f[$_-1], "file$_.txt" for 1,2; print "rename @n\n" while chomp(@n = map ''.<$_>, @f)'
Se questo funziona per te, sostituisci print
istruzione con un vero e proprio rename and use
perl -e 'open $f[$_-1], "file$_.txt" for 1,2; rename @n while chomp(@n = map ''.<$_>, @f)'
per eseguire l'effettiva ridenominazione.
Puoi usare paste
per formattare i file affiancati:
$ paste -d" " file1.txt file2.txt
/etc/port1-192.9.200.1-255.555.255.0 /etc/port1-192.90.2.1-255.555.0.0
/etc/port2-192.9.200.1-255.555.255.0 /etc/port2-192.90.2.1-255.555.0.0
/etc/port3-192.9.200.1-255.555.255.0 /etc/port3-192.90.2.1-255.555.0.0
/etc/port4-192.9.200.1-255.555.255.0 /etc/port4-192.90.2.1-255.555.0.0
/etc/port5-192.9.200.1-255.555.255.0 /etc/port5-192.90.2.1-255.555.0.0
Ad esempio:
$ paste -d" " file1.txt file2.txt | while read from to; do echo mv "${from}" "${to}"; done
mv /etc/port1-192.9.200.1-255.555.255.0 /etc/port1-192.90.2.1-255.555.0.0
mv /etc/port2-192.9.200.1-255.555.255.0 /etc/port2-192.90.2.1-255.555.0.0
mv /etc/port3-192.9.200.1-255.555.255.0 /etc/port3-192.90.2.1-255.555.0.0
mv /etc/port4-192.9.200.1-255.555.255.0 /etc/port4-192.90.2.1-255.555.0.0
mv /etc/port5-192.9.200.1-255.555.255.0 /etc/port5-192.90.2.1-255.555.0.0
Ovviamente vorrai inserire alcuni controlli di sicurezza ([ -f "${from}" ]
, ...).
Dichiarazione di non responsabilità:funziona solo se non ci sono spazi nei nomi dei file.
paste -d " " file1.txt file2.txt
funziona alla grande per questo lavoro.
Ma nel caso in cui gestisci file di testo in un ambiente Windows e utilizzi la pasta GNU, assicurati di trasformare i file in formato Unix (CR) e non utilizzare file con (CR-LF).
La pasta GNU non sembra gestire correttamente i formati DOS e l'analisi è imprevedibile. L'output previsto è irregolare e inaspettato senza avvisi.
Puoi usare gVim per trasformarli facilmente (menu Modifica → Impostazioni file → Formato file ).