2013-08-25 16 views
8

Ho un certo numero di file che termina con un '0,1' , ad esempio:Come rinominare più file da un'estensione all'altra in Linux/Unix?

example.file.ex1.1 
example.file.ex2.1 
example.file.ex3.1 

C'è un modo che io li posso rinominare velocemente senza il' .1' alla fine (per esempio, esempio .file.ex1, example.file.ex2, ecc.)?

Grazie!

+3

Questa domanda sembra essere fuori tema, perché è più adatto a [Unix e Linux] (http://unix.stackexchange.com/) –

+0

Tutte le grandi risposte. Grazie! – user2716340

+2

Ho provato ma a quanto pare non ho abbastanza "reputazione". =) – user2716340

risposta

5

soluzione bash pura:

for curFile in example.file.*.1; do 
    mv -- "$curFile" "${curFile:0:-2}" 
done 
12

Sì, provate questo con rename:

rename -n 's/\.1$//' * 

rimuovere la (selettore di modalità dry-run) -n se i test sono validi.

warning http://pix.toile-libre.org/upload/original/1377510865.pngNon ci sono altri strumenti con lo stesso nome, che può o non può essere in grado di fare questo, quindi fate attenzione.


Se si eseguire il seguente comando (linux)

$ file $(readlink -f $(type -p rename)) 

e si ha un risultato come

.../rename: Perl script, ASCII text executable 

allora questo sembra essere lo strumento giusto =)

In caso contrario, per renderlo il valore di default (di solito già il caso) su Debian e derivata come Ubuntu:

$ sudo update-alternatives --set rename /path/to/rename 

Ultimo ma non meno importante, questo strumento è stato originariamente scritto da Larry Wall, il papà del Perl.

+0

Puoi spiegare perché il default '' rename'' non funziona su Ubuntu o Debian? Sembra che sia in esecuzione ''/usr/bin/rename -n 's/.1 //' * '' funziona per me mentre il nome predefinito non lo fa. Semplicemente non capisco, entrambi permettono espressioni perl, ma uno funziona e l'altro no. Qual è la differenza? –

+0

La rinomina predefinita dovrebbe funzionare su Ubuntu/Debian –

+0

Sì! Hai ragione. Il mio male –

3

Un'altra soluzione con parameter expansion:

for curFile in example.file.*.1; do 
    mv "$curFile" "${curFile%.1}" 
done 
+0

Grazie! Funziona: f = file.zip; echo $ {f% .zip} # -> file –