GNU/Linux >> Linux Esercitazione >  >> Linux

File Linux mv con nome lungo

Soluzione 1:

per un singolo file prova

mv dir1/dir2/dir3/file.{txt,txt.old}

dove X{a,b} costruire espandere a Xa Xb , puoi avere un'anteprima usando

echo dir1/dir2/dir3/file.{txt,txt.old}

per vedere se soddisfa le tue esigenze.

nota:

  1. quello per più file

    mv dir1/dir2/dir3/file{1,2,3}.{txt,txt.old}
    

è improbabile che si espanda a ciò che desideri. (questo si espanderà in un misto di file.txt file1.txt.old file2.txt ...)

  1. {txt,txt.old} può essere ridotto a {,.old} come da commento

  2. se il nome della directory non è ambiguo, è possibile utilizzare caratteri jolly.

    mv *1/*2/d*/*.{,old}
    

per più file utilizzare rename

rename -n s/txt/old.txt/ dir1/dir2/dir3/file*.txt 

rilascia -n per avere una ridenominazione efficace.

Soluzione 2:

Il comando rename rinomina tutti i file corrispondenti. Il suo scopo principale è rinominare più file, ma se l'espressione Perl corrisponde a un solo file, allora rinominerà solo questo singolo file. Per i dettagli e la sintassi specifica della distribuzione, leggere la manpage:man rename .

Esempio di utilizzo:rinomina "/path/file.txt" in "/path/file.txt.old":

rename 's/file.txt/file.txt.old/g' /path/file.txt

Notazione più breve (grazie a shalomb):

rename 's/$/.old/' /path/file.txt
rename '$_.=".old"' /path/file.txt

Per una prova a secco usa rename -n .

Ulteriori esempi e dettagli possono essere trovati su https://thepcspy.com/read/bulk-rename-files-in-ubuntu/

Soluzione 3:

Mi piace la soluzione di @ archemar di utilizzare l'espansione {}, perché puoi usarla quando hai già avviato la tua riga di comando. Ecco alcune altre possibilità di completezza:

F="dir1/dir2/dir3/file.txt" ; mv "$F" "$F.old"

(le virgolette sono necessarie solo se nel nome sono presenti spazi o altri caratteri che spezzano le parole)

mymv() {
    mv "$1/$2" "$1/$3"
}

mymv dir1/dir2/dir3 file.txt file.txt.old
mymv dir5/dir6/dir7 file.txt file.txt.old

Note:

  • Questa è la sintassi bash, potresti usare un'altra shell
  • mymv può essere qualsiasi stringa ragionevole, ho usato mymv per "la mia mossa".
  • La definizione della funzione può essere inserita nel tuo .bash_profile

Un altro:

cd dir1/dir2/dir3 ; mv file.txt file.txt.old ; cd -

ma

(cd dir1/dir2/dir3/ && exec mv file.txt file.txt.old)

(da @Adam e @CharlesDuffy) è probabilmente migliore nel caso in cui il cd fallisca.

Soluzione 4:

Per un caso una tantum, se non voglio cambiare la mia directory corrente, potrei semplicemente usare una sub-shell:

(cd dir1/dir2/dir3/ && mv file.txt file.txt.old)

Perché tu cd all'interno della sub-shell, non hai cambiato la tua directory nella tua attuale shell

Soluzione 5:

Se vuoi entrare nella sottodirectory per abbreviare il mv comando, ma vuoi tornare alla directory corrente in seguito, ci sono due modi per farlo. Uno è mettere cd e mv in una subshell (come è già stato suggerito).

L'altro è usare pushd e popd per cambiare directory:

pushd dir1/dir2/dir3/; mv file.txt file.txt.old; popd

Il pushd il comando è come cd , tranne per il fatto che prima inserisce il nome della directory corrente in uno stack. popd rimuove il primo nome dallo stack e passa a quella directory.


Linux
  1. Rinominare un file nel terminale Linux

  2. Come ottenere solo il nome del file con Linux "trova"?

  3. Copia file Linux con ETA?

  4. Come vedo du in GB invece di MB in Linux?

  5. Creazione di modelli con Linux in uno script Shell?

Come lavorare con hardlink e softlink in Linux

Utilizzo del comando Linux mv con esempi

Proteggi Linux con il file Sudoers

Comando di montaggio Linux con esempi

Comando gawk Linux con esempi

Linux make Command con esempi