La massa cambia una parte del nome di un file?

4

Ho un sacco di file chiamati come segue (esempio):

ADVANTE  18''8.0 PCD5'114.3 ET45 CB73.1.jpg
ADVANTE  18x8.0 PCD6139.7 ET20 CB110.2.jpg
ADVANTE 'A MI576B 20''8.5 PCD6'139.7 ET25 CB110.2 GBXZLDCP.jpg
ADVANTE 'A SH10 15''6.5 PCD8'100-114.3 ET40 CB73.1 3FPBU.jpg

Come vado in ogni file e cambio una parte del loro nome file in:

ADVANTI  18''8.0 PCD5'114.3 ET45 CB73.1.jpg
ADVANTI  18x8.0 PCD6139.7 ET20 CB110.2.jpg
ADVANTI 'A MI576B 20''8.5 PCD6'139.7 ET25 CB110.2 GBXZLDCP.jpg
ADVANTI 'A SH10 15''6.5 PCD8'100-114.3 ET40 CB73.1 3FPBU.jpg

utilizzando qualche tipo di comando o app? Ci vorrebbe troppo tempo per rinominarli manualmente.

    
posta Propeller 27.02.2013 - 09:36
fonte

5 risposte

5

Se usi la shell ZSH, questo può essere fatto facilmente in Terminal con zmv (incluso con OS X per impostazione predefinita). Perché usare script di fantasia se il lavoro è già stato fatto?

Digita zsh in una finestra di terminale se per qualche motivo pazzo non lo hai impostato come shell predefinita.

autoload zmv
zmv 'ADVANTE(*)' 'ADVANTI$1'
    
risposta data 27.02.2013 - 16:58
fonte
1

Nel caso in cui sia necessario farlo spesso (e con modelli di file diversi), questo script perl potrebbe dimostrarsi molto utile. Archivia il seguente script come un file di testo chiamato rename in un posto conveniente:

#!/usr/bin/perl -w
# rename - Larry's filename fixer
$op = shift or die "Usage: rename expr [files]\n";
chomp(@ARGV = <STDIN>) unless @ARGV;
for (@ARGV) {
    $was = $_;
    eval $op;
    die $@ if $@;
    rename($was,$_) unless $was eq $_;
}

Puoi quindi utilizzare tutte le espressioni perl standard per rinominare i file, nel tuo caso

rename 's/^ADVANTE/ADVANTI/' ADVANTE*
    
risposta data 27.02.2013 - 11:19
fonte
1

Puoi provare l'app commerciale A Better Finder Rename se vuoi evitare il terminale. Hanno anche una prova gratuita.

[Disclaimer: nessun interesse finanziario nella società che vende ABFR - solo un cliente felice.]

    
risposta data 27.02.2013 - 15:22
fonte
1

A partire da OS X 10.10 (Yosemite), puoi usare il Finder per cercare e sostituire stringhe nei nomi dei file. Seleziona i file che desideri rinominare, quindi richiama l'opzione Rename… . Dovresti visualizzare un foglio di dialogo con i campi Find: e Replace with: .

    
risposta data 16.10.2014 - 23:21
fonte
0

È possibile utilizzare il terminale come segue:

find . -type f -maxdepth 1 -print0 | while read -d $'
$ ls -l
total 0
-rw-r--r--  1 corti  corti  0 Feb 27 10:26 ADVANTE  18''8.0 PCD5'114.3 ET45 CB73.1.jpg
-rw-r--r--  1 corti  corti  0 Feb 27 10:26 ADVANTE  18x8.0 PCD6139.7 ET20 CB110.2.jpg
-rw-r--r--  1 corti  corti  0 Feb 27 10:26 ADVANTE 'A MI576B 20''8.5 PCD6'139.7 ET25 CB110.2 GBXZLDCP.jpg
-rw-r--r--  1 corti  corti  0 Feb 27 10:27 ADVANTE 'A SH10 15''6.5 PCD8'100-114.3 ET40 CB73.1 3FPBU.jpg
$ find . -type f -maxdepth 1 -print0 | while read -d $'
find . -type f -maxdepth 1 -print0 | while read -d $'
$ ls -l
total 0
-rw-r--r--  1 corti  corti  0 Feb 27 10:26 ADVANTE  18''8.0 PCD5'114.3 ET45 CB73.1.jpg
-rw-r--r--  1 corti  corti  0 Feb 27 10:26 ADVANTE  18x8.0 PCD6139.7 ET20 CB110.2.jpg
-rw-r--r--  1 corti  corti  0 Feb 27 10:26 ADVANTE 'A MI576B 20''8.5 PCD6'139.7 ET25 CB110.2 GBXZLDCP.jpg
-rw-r--r--  1 corti  corti  0 Feb 27 10:27 ADVANTE 'A SH10 15''6.5 PCD8'100-114.3 ET40 CB73.1 3FPBU.jpg
$ find . -type f -maxdepth 1 -print0 | while read -d $'%pre%' file; do mv "$file" "$( echo "$file" | sed "s/\.\/ADVANTE/ADVANTI/" )" ; done
$ ls -l
total 0
-rw-r--r--  1 corti  corti  0 Feb 27 10:26 ADVANTI  18''8.0 PCD5'114.3 ET45 CB73.1.jpg
-rw-r--r--  1 corti  corti  0 Feb 27 10:26 ADVANTI  18x8.0 PCD6139.7 ET20 CB110.2.jpg
-rw-r--r--  1 corti  corti  0 Feb 27 10:26 ADVANTI 'A MI576B 20''8.5 PCD6'139.7 ET25 CB110.2 GBXZLDCP.jpg
-rw-r--r--  1 corti  corti  0 Feb 27 10:27 ADVANTI 'A SH10 15''6.5 PCD8'100-114.3 ET40 CB73.1 3FPBU.jpg
' file; do mv "$file" "$( echo "$file" | sed "s/\.\/ADVANTE/ADVANTI/" )" ; done
' file; do mv "$file" "$( echo "$file" | sed "s/\.\/ADVANTE/ADVANTI/" )" ; done $ ls -l total 0 -rw-r--r-- 1 corti corti 0 Feb 27 10:26 ADVANTI 18''8.0 PCD5'114.3 ET45 CB73.1.jpg -rw-r--r-- 1 corti corti 0 Feb 27 10:26 ADVANTI 18x8.0 PCD6139.7 ET20 CB110.2.jpg -rw-r--r-- 1 corti corti 0 Feb 27 10:26 ADVANTI 'A MI576B 20''8.5 PCD6'139.7 ET25 CB110.2 GBXZLDCP.jpg -rw-r--r-- 1 corti corti 0 Feb 27 10:27 ADVANTI 'A SH10 15''6.5 PCD8'100-114.3 ET40 CB73.1 3FPBU.jpg
' file; do mv "$file" "$( echo "$file" | sed "s/\.\/ADVANTE/ADVANTI/" )" ; done
  • find è usato per elencare tutti i file da rinominare
    • . è la directory in cui avviare la ricerca
    • -type f specifica che devono essere considerati solo i file
    • -maxdepth 1 ha specificato che find non dovrebbe recurse nelle sottodirectory
    • -print0 stampa il nome del file seguito da un carattere ASCII NUL (poiché i nomi dei file contengono spazi abbiamo bisogno di un carattere speciale per separarli: lo spazio non può essere utilizzato)
  • while read -d $'$file' file elabora i nomi dei file prodotti e li memorizza nella variabile echo "$file" | sed "s/\.\/ADVANTE/ADVANTI/"
  • mv esegue la sostituzione (ADVANTE con ADVANTI)
  • %code% sposta il primo file (il nome originale) al secondo (quello con la sostituzione)

Testato con:

%pre%     
risposta data 27.02.2013 - 10:41
fonte

Leggi altre domande sui tag