Kadang-kadang, saya telah mengedit beberapa file dan ingin memindahkannya ke folder lain. (Biasanya: ke folder Dropbox, tempat saya tidak ingin bekerja untuk menghindari memberi pemilik lain pembaruan konstan folder.) Saya melakukan ini, misalnya, dengan
mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
Setelah itu, saya sering menemukan diri saya ingin mengubah direktori ke direktori target dari operasi pemindahan saya sebelumnya. Saya menemukan diri saya menekan panah atas, menghapus final file.pdf
, memegang kiri, menghapus mv file.pdf
dan menggantinya dengan cd
.
Apakah ada cara yang lebih cepat dan lebih cerdas untuk melakukan ini? Apakah ada perintah "pindahkan file dan kemudian ubah direktori ke", atau pintasan untuk direktori yang terakhir digunakan, atau sesuatu seperti itu?
command-line
mv
Mees de Vries
sumber
sumber
Jawaban:
Jika Anda menggunakan bash, interaksi riwayatnya hanya memiliki jalan pintas untuk ini. The kata penanda untuk argumen terakhir dari perintah sebelumnya:
Dikombinasikan dengan pengubah untuk menghapus komponen pathname terakhir:
Setelah penunjuk kata opsional, Anda dapat menambahkan urutan satu atau lebih dari pengubah yang valid , masing-masing didahului oleh ':'.
Begitu:
Pintasan yang sama juga bisa digunakan dengan zsh.
sumber
Jika Anda tidak mengubah nama file, Anda dapat menghilangkannya dan saya akan menambahkannya secara otomatis; ini sangat berguna saat memindahkan banyak file:
Dengan direktori sebagai argumen terakhir, Anda dapat menggunakan
!!:$
atau!$
seperti yang dijelaskan jawaban muru.Jika Anda menggunakan bash dengan default yang biasa, Anda dapat menggunakan Alt+ .sebagai gantinya.
(Ini adalah
insert-last-argument
perintah readline ;bind -p
akan mencantumkan semua binding Anda saat ini.)sumber
mv
selalu menimpa file tujuan secara diam-diam kecuali Anda menentukan opsi-i
/--interactive
atau-n
/--no-clobber
. Itu sebabnya saya milikialias mv='mv -i' cp='cp -i'
di blog saya.bashrc
.Pendekatan lain adalah membuat perintah sendiri yang didedikasikan untuk tujuan ini. Ini dapat dilakukan melalui fungsi yang dapat terlihat seperti:
Di mana: (1)
mv-special
adalah nama fungsi; (2) variabel$1
dan$2
argumen dalam fungsi yang akan digunakan oleh perintahmv
dancd
; (3)$(echo $2-)
menambahkan karakter wildcat ke akhir string di var$2
, dan memperbaiki perilakudirname
jika variabel$2
hanya berisi path; (4)$(dirname $(echo $2-))
hanya akan memfilter jalur dari$2
.Menurut jawaban ini fungsinya bisa seperti:
Di mana:
${2%/*}
akan menyaring hanya jalur dari$2
.Agar tersedia sebagai perintah, fungsi ini harus diekspor :
Pemakaian:
atau:
Harap perhatikan bahwa - untuk kedua varian - argumen kedua (
$2
) harus diakhiri dengan nama file atau slash (/
).Agar perintah baru kami tersedia secara permanen, definisi fungsi dan perintah ekspor harus ditambahkan ke
~/.bashrc
:atau:
Perintah kustom dapat dibuat dan melalui file skrip yang dapat dieksekusi yang ditempatkan di
~/bin
atau di/usr/sbin
: Bagaimana cara membuat perintah terminal kustom (untuk menjalankan skrip)? Tapi jujur saja, saya menghadapi masalah dengan perilakucd
dalam skenario ini.sumber