Apakah ada cara menjalankan mvperintah 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
Apakah ada cara menjalankan mvperintah 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
Jawaban:
Anda dapat menggunakan ekspansi brace bash. Ini:
mv my/file/that/has/a/really/long/path/foo.{bar,baz}
akan berkembang menjadi:
mv my/file/that/has/a/really/long/path/foo.bar my/file/that/has/a/really/long/path/foo.baz
dan kemudian mvdijalankan dengan dua argumen itu. Lihat http://wiki.bash-hackers.org/syntax/expansion/brace untuk informasi lebih lanjut tentang ekspansi brace.
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 terakhir Anda dapat melakukan substitusi pada ekspansi menggunakan s/pattern/replacementsintaks sed-like eg
somecommand path/to/foo.bar !#$:s/.bar/.baz
Ex.
$ mv -v somepath/Original/Dir3/SubDir1/foo.bar !#$:s/.bar/.baz
mv -v somepath/Original/Dir3/SubDir1/foo.bar somepath/Original/Dir3/SubDir1/foo.baz
'somepath/Original/Dir3/SubDir1/foo.bar' -> 'somepath/Original/Dir3/SubDir1/foo.baz'
Jika Anda menginginkan jalur secara khusus (misalnya, ke mvfile dengan nama yang sama sekali berbeda yang tidak mudah diperoleh dengan substitusi), Anda dapat menggunakan hpengubah:
$ mv -v somepath/Original/Dir3/SubDir1/foo.baz !#$:h/baz.foo
mv -v somepath/Original/Dir3/SubDir1/foo.baz somepath/Original/Dir3/SubDir1/baz.foo
'somepath/Original/Dir3/SubDir1/foo.baz' -> 'somepath/Original/Dir3/SubDir1/baz.foo'
Untuk opsi lain, termasuk readlinekombinasi tombol untuk menarik argumen terakhir, lihat Bagaimana mengulangi parameter yang saat ini diketik pada konsol bash?
`DIR=./really/long/path/mv "$DIR"foo.bar "$DIR"foo.bzDalam satu baris: DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
cdke direktori tempat Anda ingin bekerja:cd ./really/long/pathmv foo.bar foo.bzDalam satu baris: cd ./really/long/path && mv foo.bar foo.bz
&&dalam one-liner terakhir. Kalau tidak, jika cdgagal, mvakan dijalankan di direktori yang salah, berpotensi menimpa file. Dengan cd ./really/long/path && mv foo.bar foo.baz, mvhanya akan dijalankan jika cdberhasil mengubah direktori.
cdke direktori danmvdari sana?