Đôi khi bạn cần xóa gần như tất cả các tệp khỏi một thư mục, nhưng bạn muốn giữ một hoặc một số trong số chúng. Khi có một số lượng lớn trong số họ, đi từng người một là một nhiệm vụ tẻ nhạt. Đó không phải là lựa chọn tốt nhất, có nhiều cách để làm cho công việc trong Linux dễ dàng hơn nhiều và bạn có thể loại bỏ tất cả những thứ bạn cần cùng một lúc.
Ví dụ: bạn có thể chỉ muốn xóa những người bắt đầu bằng một tên nhất định hoặc những người có phần mở rộng cụ thể, v.v. Tất cả những gì có thểTrên thực tế, trong những dịp khác, tôi đã trình bày các hướng dẫn tương tự trong LxA. Ở đây bạn có thể làm theo hướng dẫn từng bước và theo cách đơn giản để có thể xóa tất cả các tệp bạn muốn, ngoại trừ những gì bạn muốn lưu.
Và điều tuyệt vời nhất là bạn sẽ không cần cài đặt bất kỳ chương trình nào, nó có thể được thực hiện dễ dàng với các lệnh như rm và find. Đó là các chương trình đã được cài đặt sẵn trên bất kỳ bản phân phối Linux nào. Và tất nhiên, phương pháp sẽ dựa trên việc tìm kiếm các mẫu và sử dụng các kết quả phù hợp đó để chỉ loại bỏ những gì bạn muốn.
Chà, để loại bỏ ở đó một số lựa chọn thay thế, Họ là ai…
Xóa tệp khỏi thư mục bằng rm
Vâng, để sử dụng lệnh rm Để loại bỏ những gì bạn cảm thấy thích, bạn phải biết trước một số cách để xác định các mẫu:
- * (danh sách các mẫu) - phù hợp với không hoặc nhiều lần xuất hiện của các mẫu được chỉ định
- ? (danh sách các mẫu) - khớp với không hoặc một lần xuất hiện của các mẫu được chỉ định
- + (danh sách mẫu) - phù hợp với một hoặc nhiều lần xuất hiện của các mẫu được chỉ định
- @ (danh sách mẫu) - khớp với một trong các mẫu được chỉ định
- ! (danh sách mẫu) - phù hợp với bất kỳ thứ gì ngoại trừ một trong các mẫu đã cho
đến kích hoạt extglob Để sử dụng chúng, trước tiên bạn phải thực hiện lệnh sau:
<br data-mce-bogus="1"> shopt -s extglob<br data-mce-bogus="1">
Bây giờ bạn có thể sử dụng rm để xóa bất cứ thứ gì bạn muốn. Ví dụ, xóa tất cả các tệp khỏi một thư mục ngoại trừ những tệp phù hợp với tên «Lxa»:
rm -v !("lxa")
Bạn cũng có thể chỉ định hai hoặc nhiều tên mà bạn không muốn xóa. Ví dụ: để tránh xóa "lxa" và "desdelinux":
rm -v !("lxa"|"desdelinux")
Bạn có thể xóa tất cả các tệp, trừ những người có phần mở rộng .mp3. Ví dụ:
rm -v !(*.mp3)
Khi kết thúc, bạn có thể quay lại vô hiệu hóa extglob:
shopt -u extglob
Xóa tệp khỏi thư mục với tìm
Một thay thế khác cho rm là sử dụng tìm để loại bỏ bất cứ điều gì bạn thích. Bạn có thể sử dụng một đường ống và xargs với rm hoặc sử dụng tùy chọn -delete để tìm. Đó là, cú pháp chung sẽ là:
find /directory/ -type f -not -name 'PATRÓN' -delete find /directory/ -type f -not -name 'PATRÓN' -print0 | xargs -0 -I {} rm [opciones] {}
Ví dụ, hãy tưởng tượng bạn muốn xóa tất cả các tệp trong một thư mục ngoại trừ những tệp có phần mở rộng .jpg, bạn có thể sử dụng một trong hai lệnh này, vì cả hai đều nhận được cùng một kết quả:
find . -type f -not -name '*.jpg'-delete find . -type f -not -name '*.jpg' -print0 | xargs -0 -I {} rm -v {}
Thay vào đó, nếu bạn muốn thêm một số mẫu bổ sung, bạn cũng có thể. Ví dụ: giả sử bạn không muốn xóa .pdf hoặc .odt khỏi thư mục:
find . -type f -not \(-name '*pdf' -or -name '*odt' \) -delete
Tất nhiên, bạn có thể làm tương tự với | và xargs như trong ví dụ trước. Nhân tiện, chúng tôi đã sử dụng -không phủ nhận, nhưng bạn có thể loại bỏ điều đó để làm cho nó tích cực, nghĩa là loại bỏ các mẫu phù hợp và không loại trừ chúng.
Xóa tệp khỏi thư mục bằng biến GLOBIGNORE
Cuối cùng, có Một thay thế khác để tìm và rm, và nó sử dụng một biến môi trường để trỏ đến các tệp bạn muốn xóa hoặc loại trừ. Ví dụ: hãy tưởng tượng bạn muốn xóa tất cả các tệp trong thư mục có tên là Tải xuống, lưu các tệp .pdf, .mp3 và .mp4. Trong trường hợp đó, bạn có thể làm như sau:
cd Descargas GLOBIGNORE=*.pdf:*.mp4:.*mp3 rm -v * unset GLOBIGNORE