Jika saya masuk ~/blob
dan saya punya file~/blob/a_long_directory_name/c/x.x
saya bisa mengetik
mv blob/a_long_directory_name/c/x.x blob/a_long_directory_name/even_more/y.y
Apakah ada jalan pintas di mana saya dapat mengetikkan sesuatu yang lebih pendek yang menggunakan jalur direktori di param pertama (bukan direktori saya saat ini), misalnya
mv blob/a_long_directory_name/c/x.x $same_dir/y.y
di mana sesuatu seperti $same_dir
akan menunjuk ke dir dari param 1
command-line
rename
cp
Michael Durrant
sumber
sumber
even_more
jalan relatif ...Dengan bash, Anda bisa menggunakan ekspansi brace
sumber
Anda bisa menggunakan kemampuan subtitusi teks shell Anda. Di
bash
, Anda bisa menggunakan binatang seperti:Untuk memecahnya:
!#
adalah baris saat ini diketik sejauh ini:$
meminta untuk memilih kata terakhir (ganti dengan nomorn
untuk memilihn
kata th) dari string yang sedang dipertimbangkan (!#
dalam hal ini). Kata terakhir dari baris yang diketik sejauh ini adalah kata sebelumnya.:gs^xx^yy
melakukan global (g
) subtitusi teks (s
) pada kata yang dihasilkan, menggantikan 'xx' dengan 'yy'.^
hanyalah pembatas untuks
perintah untuk mengizinkan penggunaan/
dalam pola Anda.Metode ini sedikit lebih umum karena memungkinkan Anda mengganti bagian mana pun dari jalur ('xx') dengan kata lain ('yy').
Terakhir, seperti halnya manipulasi riwayat apa pun, ada baiknya mengatur opsi shell yang sesuai (misalnya di
~/.bashrc
). Pada kasus iniakan menampilkan baris yang diedit setelah Anda menekan kembali, sehingga Anda masih dapat mengeditnya dan memeriksa kesalahan.
Mengapa Anda menggunakan konstruk seperti itu, saya tidak yakin, tetapi berfungsi dalam hal ini.
sumber
c/x.x
denganevenmore/y.y
mempertahankan awalan jalur asli.$PWD
). Tentu, mungkin itu bukan yang paling elegan tetapi menunjuk pada fakta bahwa shell memang memiliki pergantian teks dan perancang kata, yang mungkin masih berguna bagi beberapa pengguna untuk diteliti.