Làm cách nào để xóa tất cả các tệp có phần mở rộng cụ thể trong một thư mục cụ thể?


36

Nếu tôi đặt thư mục hiện tại / làm việc (điều hướng đến nó bằng cách sử dụng cd) vào một số thư mục cụ thể và sau đó gõ:

rm *.xvg

Lệnh này sẽ làm gì? Có đúng là lệnh trên sẽ chỉ xóa các tệp có phần mở rộng .xvg chỉ trong thư mục làm việc?

Tôi đã lo lắng về việc thử điều này trước khi hỏi, bởi vì tôi muốn hoàn toàn chắc chắn rằng lệnh trên sẽ chỉ xóa .xvgcác tệp được định vị trong HƯỚNG DẪN LÀM VIỆC .

Câu trả lời:


34

Có, rm *.xvgsẽ chỉ xóa các tệp có phần mở rộng được chỉ định trong thư mục hiện tại của bạn .

Một cách tốt để đảm bảo bạn thực sự trong thư mục bạn muốn xóa các tệp của mình là sử dụng pwdlệnh sẽ hiển thị thư mục hiện tại của bạn và sau đó thực hiện lsđể xác minh bạn tìm thấy các tệp bạn đang mong đợi.

Nếu bạn hơi e ngại về việc ban hành rmlệnh, có 2 điều bạn có thể làm:

  1. ls *.xvgđể xem danh sách các tập tin sẽ bị ảnh hưởng bởi lệnh này.

  2. Trừ khi bạn có rất nhiều tệp, bạn luôn có thể sử dụng -ichuyển đổi dòng lệnh cho rm(cũng tồn tại cho cpmv). Việc sử dụng rm -i *.xvgsẽ nhắc bạn cho từng tệp riêng lẻ nếu xóa nó, vì vậy bạn có thể chắc chắn rằng không có gì bạn không mong đợi sẽ bị xóa. (Điều này sẽ rất tẻ nhạt nếu bạn có rất nhiều tệp :)


1
Ngoài ra: rm -f {*.xvg,.*.xvg}để loại bỏ các tập tin cũng ẩn. Và rm -R -f {*.xvg,.*.xvg}để loại bỏ cũng thư mục.
Dor

20

Bạn không cần phải điều hướng đến thư mục, chỉ cần sử dụng

rm /some/dir/*.xvg 

Trong trường hợp bạn có một lỗi đánh máy hoặc lỗi tương tự trong đường dẫn, trong đó / som / dir không tồn tại:

cd /som/dir
rm *.xvg

sẽ vô tình xóa tất cả các tệp .xvg trong thư mục hiện tại. Lệnh đầu tiên sẽ không và bạn không cần phải quay lại cd.

Một cách khác là sử dụng find:

find /some/dir/ -maxdepth 1 -type f -name "*.xvg" -delete 

find / some / dir / -maxdepth 1 -type f -name "* .xvg" -delete làm việc cho tôi! sử dụng -maxdepth "n" để xóa các tệp phù hợp trong thư mục con nếu có đường dẫn
Vinay

3

Có, rm *.xvgsẽ chỉ xóa các tệp kết thúc bằng .xvgtrong thư mục hiện tại của bạn. Đây là lý do tại sao.

Khi bạn gõ một lệnh như thế này, công việc sẽ được phân chia giữa trình bao bạn đang sử dụng (giả sử bash) và lệnh nhị phân.

Bạn có thể xác định vị trí nhị phân bằng cách gõ which rm. Chương trình nhỏ này chăm sóc các tập tin hủy liên kết. Các chương trình như thế này có thể được bắt đầu từ dòng lệnh và có thể đọc danh sách các đối số prog arg1 arg2 arg3khi chúng khởi động. Trong trường hợp rm, chúng được hiểu là một danh sách các tên tệp đủ điều kiện sẽ bị xóa. Vì vậy, nếu bạn đang ở trong một thư mục chứa tệp foo.bar, việc gõ delete 'foo.*'sẽ dẫn đến rm: foo.*: No such file or directory. Lưu ý các dấu ngoặc đơn xung quanh mẫu tệp, chúng bảo shell chuyển đối số sang shell như vậy.

Tuy nhiên nếu bạn gõ rm *.barvào cùng thư mục, nó sẽ xóa tệp. Điều đang xảy ra ở đây là shell của bạn, là chương trình bạn đang sử dụng để gõ lệnh, đang thực hiện một số biến đổi trước khi chuyển các đối số cho lệnh. Một trong số này được gọi là 'mở rộng tên tệp', nếu không được gọi là 'toàn cầu'. Bạn có thể xem danh sách mở rộng tên tệp bash tại đây . Một trong những mở rộng phổ biến nhất là *, được mở rộng thành tên tệp trong thư mục hiện tại.

Một cách đơn giản để xem xét các khối trong công việc là sử dụng echo, nó in lại tất cả các đối số được truyền cho nó thông qua trình bao. Vì vậy, gõ echo *trong cùng thư mục sẽ xuất ra foo.bar. Vì vậy, khi bạn gõ rm *.bar, điều thực sự xảy ra là shell sẽ mở rộng danh sách đối số foo.bar, sau đó chuyển nó sang rmlệnh.

Có một số cách để kiểm soát Globing. Ví dụ, trong các phiên bản gần đây của bash, bạn có thể bật tùy chọn có tên là globalstar để mở rộng đệ quy. Nhập echo **/*.barsẽ hiển thị một danh sách tất cả các tệp kết thúc .bartrong tất cả các thư mục con. Vì vậy, gõ rm **/*.barbash trên sao được kích hoạt thực sự sẽ xóa đệ quy tất cả các tệp phù hợp trong các thư mục con.


1

Chỉ huy :

  rm ./*.pgm

làm việc cho tôi

Chỉ huy:

rm *.pgm

đưa ra lệnh lỗi (bằng tiếng Ba Lan, dịch):

rm: wrong option - '1'
Use "rm ./-1000.pgm" to delete the file '-1000.pgm'.
Write "rm --help" for information.

trong

bash --version
GNU bash, wersja 4.4.19(1)-release (x86_64-pc-linux-gnu)
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.