GNU/Linux >> Linux Esercitazione >  >> Linux

Rinominare molti file in Linux secondo uno schema

Non li ho testati, quindi inserisco echo nella parte anteriore dei comandi in modo da poterli provare prima di rimuovere l'eco per eseguirli sul serio.

  1. for f in *v9.zip; do echo mv "${f}" "${f%v9.zip}.zip"; done
    
  2. for f in *_*; do echo mv "${f}" "${f//_/-}"; done
    

Per quanto riguarda il tuo terzo problema, sono sicuro che si possa fare anche questo, ma forse un approccio più sofisticato rispetto alle prime battute della shell ti aiuterà, come ha detto @tchrist.


C'è un rename comando fornito con la maggior parte delle distribuzioni basate su Debian/Ubuntu, scritto da Robin Barker sulla base del codice originale di Larry Wall del 1998 circa (!).

Ecco un estratto dalla documentazione:

  "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.

  For example, to rename all files matching "*.bak" to strip the extension, you might say

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

  To translate uppercase names to lower, you'd use

          rename 'y/A-Z/a-z/' *

Utilizza perl in modo da poter utilizzare le espressioni perl per abbinare il pattern, infatti credo che funzioni in modo molto simile agli script di tchrist.

Un altro set di strumenti davvero utile per la ridenominazione di file in blocco è la raccolta renameutils di Oskar Liljeblad. Il codice sorgente è ospitato dalla Free Software Foundation. Inoltre molte distribuzioni (specialmente quelle basate su Debian/Ubuntu) hanno un renameutils pacchetto con questi strumenti.

Su una di queste distribuzioni puoi installarlo con:

$ sudo apt-get install renameutils

E poi per rinominare i file basta eseguire questo comando:

$ qmv

Si aprirà un editor di testo con l'elenco dei file e potrai manipolarli con la funzione di ricerca e sostituzione del tuo editor.


La mia soluzione preferita è la mia rinomina copione. L'esempio più semplice che corrisponde ai tuoi problemi è questo:

% rename 's/_/-/g' *
% rename 's/(\p{Lower})(\p{Upper})/$1 $2/g' *

Anche se odio davvero gli spazi bianchi nei miei nomi di file, in particolare gli spazi bianchi verticali:

 % rename 's/\s//g' *
 % rename 's/\v//g' *

eccetera. È basato su una sceneggiatura di The Larry Wall, ma ampliato con opzioni, come in:

usage: /home/tchrist/scripts/rename [-ifqI0vnml] [-F file] perlexpr [files]
    -i          ask about clobbering existent files
    -f          force clobbers without inquiring
    -q          quietly skip clobbers without inquiring
    -I          ask about all changes
    -0          read null-terminated filenames
    -v          verbosely says what its doing 
    -V          verbosely says what its doing but with newlines between old and new filenames
    -n          don't really do it
    -m          to always rename
    -l          to always symlink
    -F path     read filelist to change from magic path(s)

Come puoi vedere, può cambiare non solo i nomi dei file, ma dove puntano i collegamenti simbolici usando lo stesso schema. Non devi usare un s/// modello, anche se spesso lo si fa.

Gli altri strumenti in quella directory sono principalmente per il lavoro Unicode, di cui ce ne sono alcuni super utili.


Linux
  1. Rinomina tutti i file e i nomi delle directory in minuscolo in Linux

  2. Rinominare i file per avere estensioni minuscole con "rinominare"?

  3. Come rinominare più file contemporaneamente in Linux

  4. Come rinominare più file insieme in Linux usando 3 metodi

  5. Rimozione di parte di un nome file per più file su Linux

Rinomina comando in Linux (rinomina più file)

Comando Rm in Linux

Come rinominare i file usando la riga di comando in Linux

Come rinominare uno o più file in Linux

8 metodi per rinominare più file contemporaneamente in Linux

Linux Rinomina estensione file multipli