Come rinominare più file sostituendo la parola nel nome del file?

Sostituire ACDC in AC-DC

Ad esempio abbiamo questi file

  • Come automatizzare l'installazione del driver da .exe
  • Imansible rimuovere file usando 'rm'
  • leggere intervalli di righe specificate da un file
  • Come visualizzare i file nascosti usando il command Linux `find`
  • Come posso automatizzare il backup di un server QuickBook?
  • Come posso recuperare una directory (cartella) da Ubuntu Server 14.04 VM senza FTP, SCP o NFS
  • ACDC – Rock N 'Roll non è rumore inquinamento.xxx

    ACDC – Rocker.xxx

    ACDC – Spara a Thrill.xxx

    Voglio che loro diventino:

    AC-DC – Rock N 'Roll non è rumore inquinamento.xxx

    AC-DC – Rocker.xxx

    AC-DC – Spara a Thrill.xxx

    So che sed o awk sono usati per questa operazione. Non posso andare a nulla, quindi ti chiedo il tuo aiuto =) Potreste forse fornire il command completo di shell per questo task?

    Risposta: Soluzione per gli utenti OSX

  • directory con due voci con un solo punto (.)
  • Membro del gruppo nginx ma incapace di modificare i file nella radice del web
  • Trasferire un file tar da 30 GB da un server remoto in un altro - restrittivo dallo spazio su disco
  • come eliminare un numero insano di file da un sistema unix?
  • Come ripristinare l'attributo compresso sui file in Windows per un'intera unità
  • leggere intervalli di righe specificate da un file
  • 6 Solutions collect form web for “Come rinominare più file sostituendo la parola nel nome del file?”

     rename 's/ACDC/AC-DC/' *.xxx 

    man rename

     DESCRIPTION "rename" renames the filenames supplied according to the rule specified as the first argument. The perlexpr argument is a Perl expression which is expected to modify the $_ string in Perl for at least some of the filenames specified. If a given filename is not modified by the expression, it will not be renamed. If no filenames are given on the command line, filenames will be read via standard input. 

    Ad esempio, per rinominare tutti i file corrispondenti a "* .bak" per eliminare l'estensione, si potrebbe dire

     rename 's/\.bak$//' *.bak 

    Per tradurre i nomi maiuscoli in basso, utilizzeresti

     rename 'y/AZ/az/' * 

    Questa risposta contiene le buone parti di tutte le altre risposte, lasciando fuori tale eresia come ls | while read ls | while read .

    Directory corrente:

     for file in ACDC*.xxx; do mv "$file" "${file//ACDC/AC-DC}" done 

    Incluse le sottodirectory:

     find . -type f -name "ACDC*" -print0 | while read -r -d '' file; do mv "$file" "${file//ACDC/AC-DC}" done 

    I caratteri di Newline sono verosimilmente improbabili nei nomi dei file, per cui questo può essere più semplice mentre si lavora ancora con i nomi contenenti spazi:

     find . -type f -name "ACDC*" | while read -r file; do mv "$file" "${file//ACDC/AC-DC}" done 

    Per utilizzare la versione util-linux di rename che Phil ha riferito (su Ubuntu, si chiama rename.ul ):

     rename ACDC AC-DC ACDC* 

    o

     rename.ul ACDC AC-DC ACDC* 

    Utilizzo della shell bash

     find . -type f -name "ACDC*" -print0 | while read -d $'\0' f do new=`echo "$f" | sed -e "s/ACDC/AC-DC/"` mv "$f" "$new" done 

    Nota: utilizzando la find verrà elaborata la directory corrente e le directory sotto.

    Dipende dalla tua copertina. In zsh, farei questo:

     for file in ACDC*.xxx; do mv "$file" "$(echo $file | sed -e 's/ACDC/AC-DC/')" done 

    Probabilmente non la soluzione migliore, ma funziona.

    Utilizzo di bash:

     ls *.xxx | while read fn; do mv "${fn}" "${fn/ACDC/AC-DC}"; done 

    Se è installato il programma di rename :

     rename 's/ACDC/AC-DC/' *.xxx 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.