Kết quả ống định vị vào rm


11

Tôi đã thử chạy

locate *.orig | xargs rm

nhưng nó nói No such file or directory

Tôi đã thấy các cách để làm điều đó findnhưng xác định vị trí trả về đường dẫn đầy đủ đến đối tượng để có thể

Câu trả lời:


20

Nếu tên tệp chứa khoảng trắng bạn nên sử dụng

locate -0 $something | xargs -0 rm

Từ locatetrang nam :

-0, --nullTách các mục nhập trên đầu ra bằng ký tự ASCII NUL thay vì viết từng mục trên một dòng riêng biệt. Tùy chọn này được thiết kế để có khả năng tương tác với tùy chọn --null của GNU xargs (1).

hoặc là

locate $something | while read f; do rm "$f"; done

Ngoài ra, bạn nên bảo vệ *.origbằng dấu ngoặc kép, để tránh sự mở rộng vỏ và vượt qua nó để xác định vị trí không bị ảnh hưởng.


Bạn có ý nghĩa gì bởi "mở rộng vỏ"?
lính.moth

+1 cho ví dụ thứ hai của bạn. Tôi luôn luôn sử dụng | while readvì thư mục nhà của tôi chứa đầy các tệp có khoảng trắng.
matpie

@ Soldier.moth: nếu trong thư mục hiện tại có các tệp tương ứng với mẫu *.orig, trình bao sẽ mở rộng mẫu thành file1.orig file2.orig ..., do đó, locatesẽ không thấy chuỗi chính xác *.orignhư bình thường.
enzotib

Ngoài ra để grep xác định vị trí đầu ra bạn có thể sau đó tr '\n' '\0'.
Pablo Bianchi

2

Không xargsphảixarg


Đó là những gì tôi có nghĩa là gõ câu hỏi từ bộ nhớ cảm ơn bạn mặc dù.
lính.moth

Ồ được thôi. Có vẻ như lỗi bạn nhận được lệnh không chính xác sau |
maco

0

Lệnh locate *.orig | xargs rmthực sự hoạt động nhưng điều đã xảy ra là locatetìm *.origcác tệp trong thùng rác và rmphát hiện ra lỗi No such file or directorykhi cố gắng xóa các tệp trong thùng rác.


Bạn nên thêm thông tin dưới dạng "bình luận" vào câu trả lời gốc hoặc bạn có thể chỉnh sửa câu trả lời gốc. Đây không phải là một câu trả lời cho câu hỏi của riêng bạn.
enzotib

Đó là một câu trả lời cho câu hỏi của tôi, lý do tôi nhận được lỗi là do định vị tìm thấy các tệp * .orig trong thùng rác và rm không thể xóa chúng. Tôi đã chấp nhận câu trả lời của bạn và bỏ phiếu cho cả hai câu trả lời khác vì chúng được viết tốt và có thể giúp ai đó đi cùng sau này.
lính.moth

0

xác định vị trí không làm hình cầu, nhưng vỏ thì có. Shell mở rộng * .orig thành những gì nó tìm thấy trong thư mục hiện tại khớp với * .orig.

Chỉ dùng

locate .orig

và nếu điều đó mang lại cho bạn những gì bạn cần

locate .orig | xargs rm

hoặc, như enzotib đã đề cập

locate -0 .orig | xargs -0 rm

nếu bạn có khoảng trắng trong tên tệp.


0

Một mẹo: Lưu tất cả các đường dẫn trong tệp tmp. sau đó, lặp lại trên đó:

#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
    pth=$line
    rm "$pth" 
done < /tmp/tmp.txt

rm -rf /tmp/tmp.txt 
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.