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 -f
lệ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 -f
lệ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'
rm -i
định vị fooBar``