2011-03-31 6 views
8

Spesso mi trovo a usare mv per rinominare un file. Per esempio.C'è qualche collegamento per fare riferimento al percorso del primo argomento in un comando MV?

mv app/models/keywords_builder.rb app/models/keywords_generator.rb 

In questo modo ho bisogno di scrivere (ok, scheda completa) il percorso per il secondo parametro. In questo esempio non è male ma a volte il percorso è profondamente annidato e sembra un bel po 'di tipizzazione extra.

Esiste un modo più efficiente per farlo?

+0

Cosa shell si usa? 'Bash'? – Mikel

risposta

12

È possibile utilizzare l'espansione della storia in questo modo:

mv app/modules/keywords_builder.rb !#^:h/keywords_generator.rb 
  1. ! introduce l'espansione della cronologia.
  2. # si riferisce al comando in corso digitato
  3. ^ significa che il primo argomento
  4. :h è un modificatore per ottenere la "testa", cioè la directory senza la parte di file

E 'supportato in bash e zsh.

Documenti:

+6

Non so se votarti o bruciarti sul rogo. –

+1

@ Ben Jackson: la maggior parte delle funzionalità di 'csh' ispirano questo tipo di sentimento. :-) – Mikel

+0

Dire se volevo ottenere una proporzione della directory (ad esempio tutto tranne l'ultima cartella)? C'è una variazione che mi permette di farlo? –

4

Un modo è digitare il nome del primo file e uno spazio, quindi premere Ctrl + w per eliminarlo. Quindi premere Ctrl + due volte per ottenere due copie del nome del file. Quindi modifica la seconda copia.

Per esempio,

mv app/models/keywords_builder.rb <Ctrl+W><Ctrl+Y><Ctrl+Y><edit as needed> 
+0

I * davvero * mi piace l'idea. Non riesco proprio a trovare un modo semplice per "tornare indietro" allo spazio con i binding bash predefiniti. 'Alt + B' quattro volte? – Mikel

+0

'Ctrl' +' a', 'Alt' +' f'? Oppure 'Ctrl' +' r', 'Spazio'. O in 'set -o vi':' Esc', 'T',' Spazio'. – geekosaur

+0

Oo! 'Ctrl + W' sarebbe fantastico qui. – Mikel

1

o cd apps/models && mv keywords_builder.rb keywords_generator.rb && cd -

+0

invece di cd su inizio e fine consiglierei pushd/popd – flolo

+0

alcune sequenze di tasti in più esattamente per lo stesso effetto. –

+0

la differenza è che il cd - funziona solo su un livello - se ti metti nella tua directory con l'intenzione di lasciarlo - il tuo OLDDIR si perde – flolo

0

risposte combinate di Mikel e geekosaur con l'utilizzo addizionale di ": p"

utilizzo espansione delle parentesi graffe per evitare prima ripetizione argomento:

mv -iv {,old_}readme.txt # 'readme.txt' -> 'old_readme.txt'

mv -iv file{,.backup} # 'file' -> 'file.backup'

espansione della storia l'uso per evitare prima ripetizione argomento:

mv -iv "system file" !#$.backup # 'system file' -> 'system file.backup'

il nome del file può essere stampato usando il designatore "p" per ulteriori informazioni edizione:

mv -iv "file with a long name" !#$:p

quindi premere "↑" per modificare il comando

Problemi correlati