Làm cách nào để đổi tên một tệp trong thư mục bằng lệnh shell?


8

Tôi có một tập tin tại some/long/path/to/file/myfiel.txt.

Tôi muốn đổi tên nó thành some/long/path/to/file/myfile.txt.

Hiện tại tôi làm điều đó bằng cách mv some/long/path/to/file/myfiel.txt some/long/path/to/file/myfile.txt, nhưng gõ hai lần đường dẫn không hiệu quả khủng khiếp (ngay cả khi hoàn thành tab).

Làm thế nào tôi có thể làm điều này nhanh hơn? (Tôi nghĩ rằng tôi có thể viết một hàm để chỉ thay đổi phân đoạn tên tệp, nhưng đó là kế hoạch B).

Câu trả lời:


11

Để làm điều này trong một lệnh duy nhất, bạn chỉ cần làm điều này:

mv some/long/path/to/file/{myfiel.txt,myfile.txt}

Đó là một ví dụ cho tên tệp đầy đủ, cho rằng đó là một lỗi đánh máy bạn có thể làm một cái gì đó như:

mv some/long/path/to/file/myfi{el,le}.txt

Cả hai sẽ mở rộng thành lệnh đầy đủ, chúng được gọi là mở rộng cú đúp . Họ được hỗ trợ bởi zsh .


Ôi trời, điều này mở ra rất nhiều khả năng. Cảm ơn!
Leonid Shevtsov

5

Dưới đây là một số tùy chọn:

Thay đổi thư mục:

cd /home/long/path
mv file1 file2
cd -

Thay đổi thư mục bằng cách sử dụng ngăn xếp thư mục:

pushd /some/long/path
mv file1 file2
popd

Thay đổi thư mục bằng cách sử dụng một subshell:

( 
  cd /some/long/path
  mv file1 file2
)   # no need to change back

Sử dụng mở rộng nẹp:

mv /some/long/path/{file1,file2}

Sử dụng một biến:

D=/some/long/path
mv "$D/file1" "$D/file2"

Coi chừng cách tiếp cận cuối cùng bị phá vỡ khi đường dẫn có khoảng trắng, beter trích dẫn nó.
slhck

@slhck TẤT CẢ các phương pháp phá vỡ nếu bạn có không gian.
tylerl

1
Không, nếu bạn gõ chúng chính xác, họ sẽ không. Chỉ biến khi được mở rộng sẽ trông giống như nhiều đối số cho mv
slhck

@slhck đấy bạn đi.
tylerl

3

Thay đổi thư mục, di chuyển tệp và thay đổi trở lại thư mục trước đó; như vậy

cd some/long/path/to/file
mv myfiel.txt myfile.txt
cd -

1

Khi tôi sử dụng phương thức subshell, tôi có xu hướng thực hiện nó trên một dòng như vậy

(cd /some/long/path ; mv myfiel myfile )
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.