Tento jednořádkový Perl zobrazí potřebná přejmenování:
perl -e 'open $f[$_-1], "file$_.txt" for 1,2; print "rename @n\n" while chomp(@n = map ''.<$_>, @f)'
Pokud vám to vyhovuje, nahraďte print
výpis se skutečným přejmenováním a použitím
perl -e 'open $f[$_-1], "file$_.txt" for 1,2; rename @n while chomp(@n = map ''.<$_>, @f)'
provést skutečné přejmenování.
Můžete použít paste
pro formátování souborů vedle sebe:
$ 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
Např.:
$ 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
Samozřejmě byste chtěli provést nějaké bezpečnostní kontroly ([ -f "${from}" ]
, ...).
Zřeknutí se odpovědnosti:Funguje pouze v případě, že v názvech souborů nejsou žádné mezery.
paste -d " " file1.txt file2.txt
pro tuto práci funguje skvěle.
Ale v případě, že pracujete s textovými soubory v prostředí Windows a používáte GNU paste, ujistěte se, že jste transformovali soubory do formátu Unix (CR) a nepoužívejte soubory s (CR-LF).
Zdá se, že GNU paste nezpracovává správně formáty DOS a analýza je nepředvídatelná. Očekávaný výstup je nestálý a neočekávaný bez varování.
K jejich snadné transformaci můžete použít gVim (menu Upravit → Nastavení souboru → Formát souboru ).