Rimuovi prefissi dai nomi dei file


10

Ho un sacco di file come segue:

04602635_b0294.DAT20120807164534
04602637_b0297.DAT20120807164713
04602638_b0296.DAT20120807164637
04602639_b0299.DAT20120807164819
04602640_b0298.DAT20120807164748
04602641_b0300.DAT20120807164849
04602650_b0301.DAT20120807164921
04602652_b0302.DAT20120807164956

Devo rinominarli per escludere il prefisso. Deve apparire così ..

b0294.DAT20120807164534
b0297.DAT20120807164713
b0296.DAT20120807164637
b0299.DAT20120807164819
b0298.DAT20120807164748
b0300.DAT20120807164849
b0301.DAT20120807164921
b0302.DAT20120807164956

MODIFICARE

Ho dimenticato di aggiungere che sto usando Solaris.

Risposte:


19
for file in * ; do
    echo mv -v "$file" "${file#*_}"
done

esegui questo per accertarti che tutto sia ok.
se lo è, rimuovi echodal comando e rinominerà i file come desideri.

"${file#*_}"

è una normale funzione di sostituzione nella shell. Rimuove tutti i caratteri prima del primo _simbolo (incluso il simbolo stesso). Per maggiori dettagli guarda qui .


Potresti spiegare cosa sta succedendo esattamente "${file#*_}"?
Pieter van Niekerk,

Ho aggiunto una spiegazione alla mia risposta.
corsa il

IMO, la maggior parte di tutti gli script devono essere scritti in modo da riprodurre l'output del comando desiderato. Ma non rimuovere quindi il echo, solo pipe l'output dello script in bash.
Jim L.

7

È possibile utilizzare lo strumento renameper questo:

rename "s/.*_//" *

Se lo aggiungi -nnon rinominerà nulla e ti mostrerà solo cosa sarebbe stato fatto senza -n.

In risposta al commento di rush: my renameis è in realtà un link prenamefornito con il perlpacchetto Debian e Ubuntu .


5
Si noti che renamenon sempre è lo stesso su sistemi diversi e talvolta la sua sintassi può differire.
corsa il

1
Il richiedente ora ha aggiunto che sta usando Solaris. Quindi questo comando di rinomina (che è specifico di Debian e derivati) non è disponibile per lui.
Gilles 'SO- smetti di essere malvagio' il

1
... a meno che non riesca a costruirlo dalla fonte.
sendmoreinfo,

@Gilles perl-renamenon è affatto specifico di Debian. Non si chiama, renamema perl-renameo prenamein altre distribuzioni. Dovrebbe essere sempre nei repository e uno è installato anche con Perl .
terdon

@terdon Un comando per rinominare i file il cui utilizzo di base è un'espressione perl non specifica di Debian. Tale comando, chiamato renamee probabilmente installabile senza richiedere esplicitamente un pacchetto che non si chiama giustorename , è specifico di Debian. Altre distribuzioni Linux chiamano il comando prenameo perl-renameper evitare confusione con util-linux renamee non raggrupparlo con il pacchetto perl, e non sono a conoscenza di alcun unix non Linux che lo spedisca sotto il nome renameo che lo spedisca in un installazione predefinita con qualsiasi nome.
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.