Rinominare i file con una struttura speciale in modo rapido

0

Ho controllato la soluzione qui , ma non affronta il mio problema troppo bene, perché non usa la struttura specifica della mia denominazione.

Ho una collezione di file, enumerati e nominati in modo sistematico, per esempio

filep-x

dove x è un numero che può essere abbastanza grande e p è un indicatore per un "makrocollection". Vorrei copiare tutti i file in un makrocollection come modello e rinominare automaticamente tutti i file copiati come

fileq-x

Con altre parole, c'è un'opzione che posso sostituire i nomi automaticamente usando il terminale (come è possibile in molti editor) senza lavorare con documenti aggiuntivi?

Grazie in anticipo!

    
posta mdot 22.02.2017 - 11:22
fonte

2 risposte

2

Questo potrebbe essere un lavoro per pax , assumendo che ci sia una convenzione di denominazione coerente.

cd directory

pax -rws/filep/fileq/ filep-* /path/to/copy/directory
    
risposta data 22.02.2017 - 13:42
fonte
1

Di solito questo può essere fatto con un ciclo bash - non il più veloce, ma semplice. Nel tipo di terminale:

for f in filep-* ; do mv -iv "$f" "$(echo "$f" | sed 's/p/q/')" ; done

Spiegazioni:

  • for f in filep-* ; do - > per tutti i file chiamati filep-anything , fai quanto segue
  • mv -iv A B move (= rinomina) da A a B, mentre dici che cosa fai -v e chiedi conferma prima di sovrascrivere un file esistente -i
  • stava per spostare un file "$f" (virgolette per affrontare problemi con spazi, ad esempio nei nomi di file) in:
  • $( $echo $f | sed 's/A/B' ) stampa il nome del file quindi usa sed in s sostituisci la prima (! e prima solo) occorrenza di A con B (questo può essere anche sed 's/this123/that456/' , ma sappi che corrisponderà il primo hit)

Per assicurarti che si comporti come previsto, esegui prima questo:

for f in filep-* ; do echo mv -iv "$f" "$(echo "$f" | sed 's/p/q/')" ; done

Questo stamperà semplicemente il comando da eseguire per ogni file e dovrebbe apparire come mv -i filep-x fileq-x .

Nota: questo è per rinominare i file e quindi dopo averli copiati. Questo non fa la copia e la rinomina in uno. Inoltre è pensato per essere eseguito dalla directory in cui si trovano i file.

    
risposta data 22.02.2017 - 12:59
fonte

Leggi altre domande sui tag