Bagaimana cara mengganti nama file di dalam folder menggunakan perintah shell?


8

Saya punya file di some/long/path/to/file/myfiel.txt.

Saya ingin mengubah nama menjadi some/long/path/to/file/myfile.txt.

Saat ini saya melakukannya mv some/long/path/to/file/myfiel.txt some/long/path/to/file/myfile.txt, tetapi mengetikkan path dua kali tidak terlalu efektif (bahkan dengan penyelesaian tab).

Bagaimana saya bisa melakukan ini lebih cepat? (Saya pikir saya bisa menulis fungsi untuk mengubah segmen nama file saja, tapi itu rencana B).

Jawaban:


11

Untuk melakukan ini dalam satu perintah, Anda bisa melakukan ini:

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

Yang merupakan contoh untuk nama file lengkap, mengingat itu salah ketik Anda dapat melakukan sesuatu seperti:

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

Keduanya akan berkembang ke perintah penuh, ini disebut ekspansi penjepit . Mereka didukung oleh zsh .


Ya ampun, ini membuka begitu banyak kemungkinan. Terima kasih!
Leonid Shevtsov

5

Berikut ini beberapa opsi:

Ubah ke direktori:

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

Ubah direktori menggunakan tumpukan direktori:

pushd /some/long/path
mv file1 file2
popd

Ubah ke direktori menggunakan subkulit:

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

Gunakan ekspansi brace:

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

Gunakan variabel:

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

Berhati-hatilah bahwa pendekatan terakhir rusak ketika jalan memiliki ruang, beter mengutipnya.
slhck

Sslhck SEMUA pendekatan rusak jika Anda memiliki spasi.
tylerl

1
Tidak, jika Anda mengetiknya dengan benar, mereka tidak akan melakukannya. Hanya variabel ketika diperluas yang akan terlihat seperti beberapa argumen untuk mv
slhck

Sslhck itu dia.
tylerl

3

Ubah ke direktori, pindahkan file, dan ubah kembali ke direktori sebelumnya; seperti itu:

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

1

Ketika saya menggunakan metode subshell saya cenderung melakukannya pada satu baris seperti itu

(cd /some/long/path ; mv myfiel myfile )
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.