cung cấp đầu ra grep cho rm


47

Tôi đang cố gắng dẫn grepđầu ra rm, nhưng nó tạo ra những thứ vô dụng. Có bất kỳ chuyển đổi cần thiết cho rm? Hoặc có rmthể được cung cấp một regrec trực tiếp?

ls | grep '^\[Daruchini'| rm

rm: thiếu toán hạng Hãy thử `rm --help 'để biết thêm thông tin.


Luôn sao chép-dán thông báo lỗi. (Tôi đã chèn thông báo lỗi thực tế vì lợi ích của độc giả trong tương lai. Nhưng tôi chỉ có thể làm điều này vì chỉ có một thông báo lỗi có thể xảy ra trong trường hợp này. Hầu hết, điều quan trọng là phải có thông báo lỗi chính xác để hiểu vấn đề Vì vậy, luôn luôn sao chép-dán tất cả các thông báo lỗi đầy đủ.)
Gilles 'SO- ngừng trở thành ác quỷ'

Câu trả lời:


57

Bạn cần sử dụng xargsđể biến đầu vào tiêu chuẩn thành đối số cho rm.

$ ls | grep '^Dar' | xargs rm

(Coi chừng các ký tự đặc biệt trong tên tệp; với GNU grep, bạn có thể thích

$ ls | grep -Z '^Dar' | xargs -0 rm

)

Ngoài ra, trong khi shell không sử dụng regexps, đó là một mẫu đơn giản:

$ rm Dar*

(trong khi đó, tôi nghĩ rằng tôi cần ngủ nhiều hơn.)


2
Giả sử người hỏi không mắc lỗi khi (các) anh ta đăng câu hỏi, anh ta sẽ rm Dar*không trả lời rm !(Dar*).
Gilles 'SO- ngừng trở thành ác quỷ'

... đúng, đúng, tôi đã bị kẹt trong zsh ^chế độ (tương tự như basg !điều).
geekizard

1
+1 Câu trả lời tuyệt vời, tôi đã phải thêm | tr "\n" "\0"trước xargsbit. Nhìn thấy trong bài đăng này: stackoverflow.com/questions/20307299/ từ
Adam Plocher

5

Đừng phân tích đầu ra củals .

Ở đây, rất đơn giản để lấy shell để lọc các tệp bạn muốn. Lưu ý rằng đó là lớp vỏ mở rộng mẫu Dar*chứ không phải rmlệnh. Việc mở rộng mô hình được thực hiện bởi shell được gọi là continbing .

rm Dar*

Trong trường hợp phức tạp hơn, tìm kiếm findlệnh.


3

Nếu bạn muốn phân định đầu ra của grepdòng mới thay vì khoảng trắng, bạn có thể chỉ định điều đó xargsthông qua -dtùy chọn.

$ ls | grep '^Dar' | xargs -d '\n' rm

(như được mô tả trong câu hỏi này )


2

Để truyền đầu ra dưới dạng đối số, tôi có xu hướng sử dụng vòng lặp while vì tôi không quen với xargs.

ls | grep '^Dar' | while read line; do rm "$line";done;

đây là người duy nhất làm việc trong trường hợp của tôi
marbel

0

Lệnh tốt nhất cho tôi là:

find ./Daruchini* -exec rm {}\;
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.