Có cách nào để thực thi một mv
lệnh mà không cần nhập đường dẫn đầy đủ trong đối số thứ hai không?
Thí dụ:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
Có cách nào để thực thi một mv
lệnh mà không cần nhập đường dẫn đầy đủ trong đối số thứ hai không?
Thí dụ:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
Câu trả lời:
Bạn có thể sử dụng mở rộng cú đúp của bash. Điều này:
mv my/file/that/has/a/really/long/path/foo.{bar,baz}
sẽ mở rộng thành:
mv my/file/that/has/a/really/long/path/foo.bar my/file/that/has/a/really/long/path/foo.baz
và sau đó mv
được chạy với hai đối số đó. Xem http://wiki.bash-hackers.org/syntax/Exansion/brace để biết thêm về mở rộng niềng răng.
Thay thế cho mở rộng cú đúp, bạn có thể sử dụng các tính năng mở rộng lịch sử của bash shell :
!
giới thiệu một mở rộng lịch sử#
người chỉ định sự kiện biểu thị lệnh hiện tại$
từ chỉ định đề cập đến đối số cuối cùng Bạn có thể thực hiện thay thế trên bản mở rộng bằng s/pattern/replacement
cú pháp giống như sed, vd
somecommand path/to/foo.bar !#$:s/.bar/.baz
Ví dụ.
$ 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'
Nếu bạn muốn đường dẫn cụ thể (ví dụ: đến mv
một tệp có tên hoàn toàn khác mà không dễ dàng có được bằng cách thay thế), bạn có thể sử dụng công cụ h
sửa đổi:
$ 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'
Đối với các tùy chọn khác, bao gồm readline
các tổ hợp phím để kéo ra đối số cuối cùng, hãy xem Cách lặp lại tham số hiện được nhập trong tham số trên bảng điều khiển bash?
`DIR=./really/long/path/
mv "$DIR"foo.bar "$DIR"foo.bz
Trong một dòng: DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
cd
vào thư mục bạn muốn làm việc:cd ./really/long/path
mv foo.bar foo.bz
Trong một dòng: cd ./really/long/path && mv foo.bar foo.bz
&&
trong đó một lót cuối cùng. Mặt khác, nếu cd
thất bại, mv
sẽ bị chạy trong thư mục sai, có khả năng ghi đè lên một tệp. Với cd ./really/long/path && mv foo.bar foo.baz
, mv
sẽ chỉ được chạy nếu cd
thành công trong việc thay đổi thư mục.
cd
vào thư mục vàmv
từ đó?