Come rinominare un file all'interno di una cartella usando un comando shell?


8

Ho un file su some/long/path/to/file/myfiel.txt.

Voglio rinominarlo in some/long/path/to/file/myfile.txt.

Attualmente lo faccio mv some/long/path/to/file/myfiel.txt some/long/path/to/file/myfile.txt, ma digitando il percorso due volte non è terribilmente efficace (anche con il completamento della scheda).

Come posso farlo più velocemente? (Penso di poter scrivere una funzione per modificare solo il segmento del nome file, ma questo è il piano B).

Risposte:


11

Per fare questo in un singolo comando, puoi semplicemente farlo:

mv some/long/path/to/file/{myfiel.txt,myfile.txt}

Che è un esempio per il nome completo del file, dato che si tratta di un errore di battitura puoi fare qualcosa del tipo:

mv some/long/path/to/file/myfi{el,le}.txt

Entrambi si espanderanno al comando completo, questi sono chiamati espansioni del controvento . Sono supportati da zsh .


Oh mio Dio, questo apre tante possibilità. Grazie!
Leonid Shevtsov,

5

Ecco alcune opzioni:

Passare alla directory:

cd /home/long/path
mv file1 file2
cd -

Cambia directory usando lo stack di directory:

pushd /some/long/path
mv file1 file2
popd

Passare alla directory usando una subshell:

( 
  cd /some/long/path
  mv file1 file2
)   # no need to change back

Usa espansione parentesi graffa:

mv /some/long/path/{file1,file2}

Usa una variabile:

D=/some/long/path
mv "$D/file1" "$D/file2"

Attenzione che l'ultimo approccio si interrompe quando il percorso ha uno spazio, beter lo cita.
slhck,

@slhck TUTTI gli approcci si rompono se hai spazi.
Tylerl,

1
No, se li digiti correttamente non lo faranno. Solo la variabile una volta espansa assomiglierà a più argomenti per mv
slhck,

@slhck eccoti.
Tylerl,

3

Passare alla directory, spostare il file e tornare alla directory precedente; così:

cd some/long/path/to/file
mv myfiel.txt myfile.txt
cd -

1

Quando uso il metodo subshell tendo a farlo su una riga in questo modo

(cd /some/long/path ; mv myfiel myfile )
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.