Apakah ada cara menjalankan mv
perintah tanpa mengetikkan path lengkap dalam argumen kedua?
Contoh:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
command-line
Finbarr
sumber
sumber
cd
ke direktori danmv
dari sana?Jawaban:
Anda dapat menggunakan ekspansi brace bash. Ini:
akan berkembang menjadi:
dan kemudian
mv
dijalankan dengan dua argumen itu. Lihat http://wiki.bash-hackers.org/syntax/expansion/brace untuk informasi lebih lanjut tentang ekspansi brace.sumber
Sebagai alternatif terhadap penjepit ekspansi, Anda dapat menggunakan fitur ekspansi riwayat bash shell :
!
memperkenalkan ekspansi sejarah#
penunjuk acara menunjukkan perintah saat ini$
kata designator mengacu pada argumen terakhirAnda dapat melakukan substitusi pada ekspansi menggunakan
s/pattern/replacement
sintaks sed-like egEx.
Jika Anda menginginkan jalur secara khusus (misalnya, ke
mv
file dengan nama yang sama sekali berbeda yang tidak mudah diperoleh dengan substitusi), Anda dapat menggunakanh
pengubah:Untuk opsi lain, termasuk
readline
kombinasi tombol untuk menarik argumen terakhir, lihat Bagaimana mengulangi parameter yang saat ini diketik pada konsol bash?sumber
Anda mungkin mencoba:
sumber
Dengan variabel
`DIR=./really/long/path/
mv "$DIR"foo.bar "$DIR"foo.bz
Dalam satu baris:
DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
Mengubah direktori
cd
ke direktori tempat Anda ingin bekerja:cd ./really/long/path
mv foo.bar foo.bz
Dalam satu baris:
cd ./really/long/path && mv foo.bar foo.bz
sumber
&&
dalam one-liner terakhir. Kalau tidak, jikacd
gagal,mv
akan dijalankan di direktori yang salah, berpotensi menimpa file. Dengancd ./really/long/path && mv foo.bar foo.baz
,mv
hanya akan dijalankan jikacd
berhasil mengubah direktori.Anda dapat meminta alias untuk menyingkat nama direktori:
sumber
alias test='/var/log' ; cd test
memberi-bash: cd: test: No such file or directory
.