Familiarizza con il potere di rinominare i file del mondo Linux e fornisci mv
—E te stesso— una pausa. Rename
è flessibile, veloce e, A volte, ancora più facile. Ecco un tutorial di questo potente comando.
Che dire di mv?
Non c'è niente di sbagliato in mv
. Il comando fa un buon lavoro, e si trova in tutte le distribuzioni Linux, su macOS e altri sistemi operativi simili a Unix. Per questo è sempre abilitato. Ma ogni tanto basta un bulldozer, non una pala.
il mv
Il comando ha uno scopo nella vita ed è spostare i file. È un felice effetto collaterale che può essere utilizzato per spostare un file esistente entro un nuovo file, con un nuovo nome. L'effetto finale è rinominare il file, così otteniamo quello che vogliamo. Ma mv
non è uno strumento dedicato per la ridenominazione dei file.
Rinomina un singolo file con mv
Utilizzo mv
rinominare un tipo di file mv
, Uno spazio, il nome del file, uno spazio e il nuovo nome che vuoi che abbia il file. Quindi premi Invio.
Puoi usare ls
per verificare che il nome del file sia stato modificato.
mv vecchio file.txt nuovo file.txt
ls *.txt
Rinomina più file con mv
Le cose si complicano quando vuoi rinominare più file. mv
non ha la possibilità di rinominare più file. Devi ricorrere all'uso di alcuni ingegnosi trucchi di bash. Va bene se conosci qualche riga di comando di livello medio fu, ma la complessità di rinominare più file con mv
contrasta con la facilità d'uso mv
rinominare un singolo file.
Le cose si intensificano rapidamente.
Diciamo che abbiamo una directory con una serie di file, di diverso genere. Alcuni di questi file hanno un'estensione “.Alcuni di questi file hanno un'estensione”. Alcuni di questi file hanno un'estensione “.prg”.
Come combattiamo?? mv
farlo per noi? Diamo un'occhiata agli archivi.
ls * .prog -l
Ecco un modo per farlo che non richieda la scrittura di un vero file di script bash.
per f in *.prog; fare mv -- "$F" "${f%.prog}.prg"
Ha funzionato? Esaminiamo i file e vediamo.
ls *.pr*
Quindi, sì, ha funzionato. Alcuni di questi file hanno un'estensione “.prg” Alcuni di questi file hanno un'estensione “.Alcuni di questi file hanno un'estensione” Alcuni di questi file hanno un'estensione.
Cosa è appena successo?
Cosa ha fatto davvero quel lungo comando?? Analizziamolo.
per f in *.prog; fare mv -- "$F" "${f%.prog}.prg"
Alcuni di questi file hanno un'estensione “.Alcuni di questi file hanno un'estensione” Alcuni di questi file hanno un'estensione, allo stesso tempo.
La parte successiva dice cosa farà l'elaborazione. fare. Sta usando mv
per spostare ogni file in un nuovo file. Alcuni di questi file hanno un'estensione “.Alcuni di questi file hanno un'estensione”. Anziché, Alcuni di questi file hanno un'estensione “.prg”.
Ci deve essere un modo più semplice
Decisamente. È lui rename
comando.
rename
non fa parte di una distribuzione Linux standard, quindi dovrai installarlo. Ha anche un nome diverso in diverse famiglie Linux, ma funzionano tutti allo stesso modo. Dovrai solo sostituire il nome del comando appropriato in base al tipo di Linux che stai utilizzando.
su distribuzioni derivate Ubuntu e Debian che installi rename
come questo:
sudo apt-get install rename
Nelle distribuzioni derivate da Fedora e RedHat, installare prename
come questo. Alcuni di questi file hanno un'estensione “P” Alcuni di questi file hanno un'estensione, che significa Perl.
sudo dnf install prename
Per installarlo su Manjaro Linux usa il seguente comando. Nota che viene chiamato il comando rename perl-rename
.
sudo pacman -Syu perl-rename
Facciamolo ancora
E questa volta useremo rename
. Alcuni di questi file hanno un'estensione “.Alcuni di questi file hanno un'estensione”.
ls * .prog
Ora usiamo il seguente comando per rinominarli. Più tardi lo verificheremo con ls
si ha funzionato. Ricordati di sostituire rename
con il nome del comando appropriato per il tuo Linux se non stai usando Ubuntu o un Linux derivato da Debian.
rinomina 's/.prog/.prg/' *.prog
ls *.pr*
Ha funzionato, Alcuni di questi file hanno un'estensione “.prg” Alcuni di questi file hanno un'estensione “.Alcuni di questi file hanno un'estensione” Alcuni di questi file hanno un'estensione.
Cosa è successo in questo momento?
Spieghiamo quel po' di magia, in tre parti.
il primo parte è il nome del comando, rename
(oh prename
oh perl-rename
, per le altre distribuzioni).
il più recente parte è *.prog
, cosa dice rename
Alcuni di questi file hanno un'estensione “.Alcuni di questi file hanno un'estensione”.
il metà parte imposta il lavoro che vogliamo fare su ogni nome di file. il s
significa sostituto. Il primo termine (.prog
) che cos'è rename
cercherà ogni nome di file e secondo termine (.prg
) è ciò che verrà sostituito.
La parte centrale del comando, o espressione centrale, è un Perl ‘frase normale'Ed è ciò che dà il rename
padroneggia la tua flessibilità.
Modificare altre parti del nome di un file
Finora abbiamo cambiato le estensioni dei nomi dei file, modifichiamo altre parti dei nomi dei file.
Ci sono molti file di codice sorgente C nella directory. Alcuni di questi file hanno un'estensione “Alcuni di questi file hanno un'estensione”. Possiamo verificarlo con ls
.
ls sl*.c
Alcuni di questi file hanno un'estensione “Alcuni di questi file hanno un'estensione” insieme a “Alcuni di questi file hanno un'estensione”. Il formato del comando ci è già familiare. Stiamo solo cambiando il termine di ricerca, il termine di sostituzione e il tipo di file.
rinomina 's/slang_/sl_' *.c
Alcuni di questi file hanno un'estensione “.C” Alcuni di questi file hanno un'estensione “Alcuni di questi file hanno un'estensione”. Alcuni di questi file hanno un'estensione “Alcuni di questi file hanno un'estensione” Alcuni di questi file hanno un'estensione, Alcuni di questi file hanno un'estensione “Alcuni di questi file hanno un'estensione”.
Possiamo controllare il risultato di quel comando ripetendo il ls
comando dall'alto con gli stessi parametri:
ls sl*.c
Elimina parte del nome di un file
Possiamo eliminare una parte di un nome di file sostituendo il termine di ricerca con niente.
ls *.c
rinomina 's/sl_//' *.c
ls *.c
Possiamo vedere dal ls
Alcuni di questi file hanno un'estensione “.C” sono preceduti da “Alcuni di questi file hanno un'estensione”. Eliminiamolo completamente.
il rename
Il comando segue lo stesso formato di prima. sono preceduti da “.C”. sono preceduti da “Alcuni di questi file hanno un'estensione”, ma non c'è nessun termine di sostituzione. Due barre rovesciate senza niente tra di loro non significano niente, una stringa vuota.
rename
sono preceduti da “.C” allo stesso tempo. sono preceduti da “Alcuni di questi file hanno un'estensione” sono preceduti da. Se trovato, non sarà sostituito da nulla. In altre parole, il termine di ricerca è stato rimosso.
Il secondo uso di ls
sono preceduti da “Alcuni di questi file hanno un'estensione” sono preceduti da “.C”.
Limita le modifiche a parti specifiche dei nomi dei file
Usiamo ls
sono preceduti da “sono preceduti da” nel nome del tuo file. Allora useremo rename
sono preceduti da “parametro”. noi useremo ls
ancora una volta per vedere l'effetto rename
comando aveva in quei file.
ls * parametro *
rinomina 's/param/parameter' *.c
ls * parametro *
sono preceduti da “sono preceduti da” nel nome del tuo file. param.c, sono preceduti da “sono preceduti da” a cominciare del suo nome. sono preceduti da “sono preceduti da” a fine del suo nome, appena prima dell'estensione.
il rename
sono preceduti da “sono preceduti da” sono preceduti da “parametro” sono preceduti da.
Il secondo uso di ls
Il comando ci mostra che questo è esattamente quello che è successo. e “sono preceduti da” sono preceduti da, sono preceduti da “parametro”.
Possiamo usare i metacaratteri Perl per perfezionare il comportamento dell'espressione media. I metacaratteri sono simboli che rappresentano posizioni o sequenze di caratteri. Come esempio, ^
significa “sono preceduti da”, $
significa “sono preceduti da” e .
significa qualsiasi singolo carattere (a parte un carattere di nuova riga).
Useremo l'inizio del metacarattere della stringa ( ^
) per restringere la nostra ricerca all'inizio dei nomi dei file.
ls *stop*.c
rinomina 's/^parametro/valore/' *.c
ls *stop*.c
ls valore*.c
sono preceduti da “parametro” sono preceduti da.
I nostri rename
il comando usa l'inizio della riga (^
) metacarattere prima del termine di ricerca “parametro”. Questo dice rename
considerare il termine di ricerca trovato solo se si trova all'inizio del nome del file. Il “parametro” metacarattere prima del termine di ricerca.
Verifica con ls
, metacarattere prima del termine di ricerca “parametro” a fine il nome del file non è stato modificato, metacarattere prima del termine di ricerca “parametro” a cominciare metacarattere prima del termine di ricerca “valore”.
Il potere di rename
risiede nel potere di Perl. Tutti i potere di Perl è a tua disposizione.
Cerca con i cluster
rename
ha ancora più assi nella manica. Consideriamo il caso in cui puoi avere file con stringhe simili nei loro nomi. Non sono esattamente le stesse catene, quindi una semplice ricerca e sostituzione non funzionerà qui.
In questo esempio usiamo ls
metacarattere prima del termine di ricerca “metacarattere prima del termine di ricerca”. Ce ne sono due, string.cy strangolare.c. Possiamo rinominare entrambe le stringhe contemporaneamente usando una tecnica chiamata raggruppamento.
L'espressione centrale di questo rename
metacarattere prima del termine di ricerca “metacarattere prima del termine di ricerca” oh “metacarattere prima del termine di ricerca” metacarattere prima del termine di ricerca “ng”. In altre parole, metacarattere prima del termine di ricerca “catena” e “metacarattere prima del termine di ricerca”. metacarattere prima del termine di ricerca “metacarattere prima del termine di ricerca”.
ls str*.c
rinomina 's/(stri|stra)di/bang/' *.c
sei tu*.c
Usando ls
una seconda volta conferma che string.c è diventato bang.c e strangle.c è ora bangle.c.
Utilizzo di traduzioni con cambio di nome
il rename
Il comando può eseguire azioni sui nomi di file chiamate traduzioni. Un semplice esempio di traduzione sarebbe forzare un insieme di nomi di file in maiuscolo.
In rename
comando sotto nota che non ne stiamo usando uno s/
per iniziare l'espressione centrale, stiamo usando y/
. Questo dice rename
non stiamo facendo una sostituzione; stiamo facendo una traduzione.
il a-z
term è un'espressione Perl che significa tutti i caratteri minuscoli nella sequenza da aa z. Nello stesso modo, il A-Z
term rappresenta tutte le lettere maiuscole nella sequenza dalla A alla Z.
metacarattere prima del termine di ricerca “se una delle lettere minuscole dalla a alla z si trova nel nome del file, se una delle lettere minuscole dalla a alla z si trova nel nome del file”.
se una delle lettere minuscole dalla a alla z si trova nel nome del file “.prg” se una delle lettere minuscole dalla a alla z si trova nel nome del file, usa questo comando:
rinomina 'y / il / dalla A alla Z /’ * .prg
ls * .PRG
il ls
se una delle lettere minuscole dalla a alla z si trova nel nome del file “.prg” se una delle lettere minuscole dalla a alla z si trova nel nome del file. In realtà, per essere rigorosamente precisi, se una delle lettere minuscole dalla a alla z si trova nel nome del file “.prg”. se una delle lettere minuscole dalla a alla z si trova nel nome del file “.PRG”. Linux fa distinzione tra maiuscole e minuscole.
Possiamo invertire l'ultimo comando invertendo la posizione del a-z
e A-Z
termini nell'espressione centrale.
rinomina 'y / IL / il /’ * .PRG
ls * .prg
Non impari Perl in cinque minuti
Familiarizzare con Perl è tempo ben speso. Ma per iniziare a utilizzare le capacità di risparmio di tempo del rename
comando, non hai bisogno di molta conoscenza di Perl per ottenere grandi potenziali benefici, semplicità e tempo.
impostaTimeout(funzione(){
!funzione(F,B,e,v,n,T,S)
{Se(f.fbq)Restituzione;n=f.fbq=funzione(){n.callMethod?
n.callMethod.apply(n,argomenti):n.queue.push(argomenti)};
Se(!f._fbq)f._fbq = n;n.push=n;n.loaded=!0;n.version='2.0′;
n.coda=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(T,S) } (window, documento,'copione',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('dentro', '335401813750447');
fbq('traccia', 'Visualizzazione della pagina');
},3000);