Làm cách nào để xóa tất cả các tệp được trả về bằng định vị


13

Hiện tại anh ấy là những gì tôi làm:

Bước 1:

locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar

Bước 2:

Thực hiện thủ công loại bỏ, bằng cách sao chép từng dòng.

rm /home/abc/fooBar
rm /home/abc/Music/fooBar

Làm thế nào để tôi làm điều này trong một bước? Cái gì đó như

định vị fooBar> rm

Cảm ơn.


Bạn có muốn cái này không? rm -i định vị fooBar``
LFC_fan

Tôi không chắc chắn những gì ở trên làm. Tôi chỉ muốn xóa tất cả các tệp, từ các đường dẫn được trả về khi tôi chạy lệnh định vị.
theTuxRacer

Câu trả lời:


13

Như các chaps khác đã đề cập, xargs là bạn của bạn. Đó là một công cụ thực sự mạnh mẽ và tôi sẽ cố gắng giải thích nó và cung cấp một cách giải quyết cho một vấn đề chung.

Những gì xargs làm là lấy một dòng từ đầu vào và nối nó với một lệnh khác, thực hiện lệnh khác đó cho mọi dòng trong đầu vào. Vì vậy, bằng cách gõ locate foobar | xargs rm -f, đầu ra của vị chỉ huy sẽ được vá vào cuối của rm -flệnh, và thực hiện cho mỗi dòng sản xuất bởi locate foobar.

Gotcha:

Nhưng nếu có khoảng trắng trong (các) dòng của bạn được trả về bằng cách xác định vị trí thì sao? Điều đó sẽ phá vỡ rm -flệnh vì các đối số được truyền cho rm cần phải là tệp (trừ khi bạn sử dụng khóa -r) và đường dẫn tệp cần được thoát hoặc trích dẫn nếu nó chứa khoảng trắng.

xargs cung cấp khóa chuyển đổi -i, để thay thế đầu vào thành lệnh theo sau thay vì chỉ nối thêm nó. Vì vậy, tôi muốn thay đổi đề xuất thành

locate foobar | xargs -ixxx rm -f 'xxx'

bây giờ sẽ chỉ bị hỏng nếu tên tệp được trả về bằng cách xác định vị trí dấu nháy đơn.

Tôi phải đồng ý với qbi, rằng bạn nên cẩn thận khi sử dụng rm -f ! Sử dụng cờ -p để xargs hoặc chỉ tự chạy foobar xác định vị trí trước khi đưa nó vào xargs hoặc thả -f từ rm.

locate foobar | xargs -p -ixxx rm -f 'xxx'

9
Để mạnh mẽ chống lại các tệp có ký tự kỳ lạ (dòng mới, dấu ngoặc kép, dấu nháy đơn, v.v.) trong tên của chúng, bạn có thể sử dụng tùy chọn -0( --null) để định vị và xargs. Điều này sử dụng ký tự ASCII NUL an toàn để phân tách tên tệp:locate -0 foobar | xargs -0 rm
Jukka Matilainen

1
+1 cho câu trả lời và được chọn để đề cập đến gotcha ^ _ ^
theTuxRacer

Tôi đã thử nó nhưng nó không hoạt động.
Pronoy999

Hoạt động một phần
SteveS

7

Bạn có thể cần thêm một số tùy chọn để sử dụng với xargs. Kiểm tra nó đầu tiên với xargs -p. Nếu nó ổn, loại bỏ -ptùy chọn:

locate foobar | xargs rm

6

Để xóa tất cả các tệp được trả về bằng định vị, hãy đưa ra lệnh sau trong thiết bị đầu cuối của bạn

locate foobar | xargs rm -f

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.