Android

Lệnh Xargs trong linux

Linux команда xargs.

Linux команда xargs.

Mục lục:

Anonim

Tiện ích xargs cho phép bạn xây dựng và thực hiện các lệnh từ đầu vào tiêu chuẩn. Nó thường được sử dụng kết hợp với các lệnh khác thông qua đường ống.

Với xargs , bạn có thể cung cấp đầu vào tiêu chuẩn làm đối số cho các tiện ích dòng lệnh như mkdir rm .

Trong hướng dẫn này, chúng tôi sẽ đề cập đến những điều cơ bản khi sử dụng lệnh xargs .

Cách sử dụng lệnh Linux xargs

xargs đọc các đối số từ đầu vào tiêu chuẩn, được phân tách bằng khoảng trắng hoặc dòng mới và thực thi lệnh được chỉ định bằng cách sử dụng đầu vào làm đối số của lệnh. Nếu không có lệnh nào được cung cấp, mặc định là /bin/echo .

Cú pháp của lệnh xargs như sau:

xargs]

Ví dụ cơ bản nhất về việc sử dụng xargs là chuyển một số chuỗi được phân tách bằng khoảng trắng bằng cách sử dụng một đường ống để xargs và chạy một lệnh sẽ sử dụng các chuỗi đó làm đối số.

echo "file1 file2 file3" | xargs touch

Trong ví dụ trên, chúng tôi đang chuyển đầu vào tiêu chuẩn sang xargs và lệnh touch được chạy cho mỗi đối số, tạo ba tệp. Điều này giống như khi bạn chạy:

touch file1 file2 file3

Cách xem lệnh và nhắc nhở người dùng

Để in lệnh trên thiết bị đầu cuối trước khi thực hiện, hãy sử dụng tùy chọn -t ( --verbose ):

echo "file1 file2 file3" | xargs -t touch

touch file1 file2 file3

echo "file1 file2 file3" | xargs -p touch

Nhập y hoặc Y để xác nhận và chạy lệnh:

touch file1 file2 file3 ?…y

Tùy chọn này rất hữu ích khi thực hiện các lệnh phá hoại.

Làm thế nào để hạn chế số lượng đối số

Theo mặc định, số lượng đối số được truyền cho lệnh được xác định bởi giới hạn của hệ thống.

Tùy chọn -n ( --max-args ) chỉ định số lượng đối số được truyền cho lệnh đã cho. xargs chạy lệnh được chỉ định nhiều lần nếu cần thiết cho đến khi tất cả các đối số đã hết.

Trong ví dụ sau, số lượng đối số được đọc từ đầu vào tiêu chuẩn được giới hạn là 1.

echo "file1 file2 file3" | xargs -n 1 -t touch

Như bạn có thể thấy từ đầu ra dài dòng bên dưới, lệnh cảm ứng được thực hiện riêng cho từng đối số:

touch file1 touch file2 touch file3

Cách chạy nhiều lệnh

Để chạy nhiều lệnh với xargs , hãy sử dụng tùy chọn -I . Nó hoạt động bằng cách định nghĩa một replace-str sau tùy chọn -I và tất cả các lần xuất hiện của replace-str được thay thế bằng đối số được truyền cho xargs.

Ví dụ xargs sau đây sẽ chạy hai lệnh, đầu tiên nó sẽ tạo các tệp bằng touch và sau đó nó sẽ liệt kê các tệp bằng ls :

echo "file1 file2 file3" | xargs -t -I % sh -c '{ touch %; ls -l %; }'

-rw-r--r-- 1 linuxize users 0 May 6 11:54 file1 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file2 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file3

Một lựa chọn phổ biến cho replace-str % . Tuy nhiên, bạn có thể sử dụng một trình giữ chỗ khác, ví dụ: ARGS :

echo "file1 file2 file3" | xargs -t -I ARGS sh -c '{ touch ARGS; ls -l ARGS; }'

Cách chỉ định một dấu phân cách

Sử dụng tùy chọn -d ( --delimiter ) để đặt một dấu phân cách tùy chỉnh, có thể là một ký tự đơn hoặc một chuỗi thoát bắt đầu bằng \ .

Ví dụ sau chúng tôi đang sử dụng ; như một dấu phân cách:

echo "file1;file2;file3" | xargs -d ; -t touch

touch file1 file2 file3

Cách đọc các mục từ tệp

Lệnh xargs cũng có thể đọc các mục từ một tệp thay vì đầu vào tiêu chuẩn. Để làm như vậy, sử dụng tùy chọn -a ( --arg-file ) theo sau là tên tệp.

Trong ví dụ sau, lệnh xargs sẽ đọc tệp ips.txt và ping từng Địa chỉ IP.

ips.txt

8.8.8.8 1.1.1.1

Chúng tôi cũng đang sử dụng tùy chọn -L 1 , hướng dẫn xargs đọc một dòng tại thời điểm đó. Nếu tùy chọn này bị bỏ qua, xargs sẽ chuyển tất cả IP sang một lệnh ping .

xargs -t -L 1 -a ips.txt ping -c 1

ping -c 1 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=68.1 ms… ping -c 1 1.1.1.1 PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data. 64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=21.4 ms

Sử dụng xargs với find

xargs thường được sử dụng kết hợp với lệnh find . Bạn có thể sử dụng find để tìm kiếm các tệp cụ thể và sau đó sử dụng xargs để thực hiện các thao tác trên các tệp đó.

Để tránh các vấn đề với tên tệp chứa dòng mới hoặc các ký tự đặc biệt khác, luôn sử dụng tùy chọn find -print0 , điều này khiến find in tên tệp đầy đủ theo sau là ký tự null. Đầu ra này có thể được giải thích chính xác bởi xargs bằng cách sử dụng tùy chọn -0 , ( --null ).

Trong ví dụ sau, find sẽ in tên đầy đủ của tất cả các tệp bên trong thư mục /var/www/.cache xargs sẽ chuyển các đường dẫn tệp tới lệnh rm :

find /var/www/.cache -type f -print0 | xargs -0 rm -f

Sử dụng xargs để cắt các ký tự khoảng trắng

xargs cũng có thể được sử dụng như một công cụ để loại bỏ khoảng trắng từ cả hai phía của một chuỗi đã cho. Đơn giản chỉ cần nối chuỗi vào lệnh xargs và nó sẽ thực hiện cắt xén:

echo " Long line " | xargs

Long line

Điều này có thể hữu ích khi so sánh các chuỗi trong shell script.

#!/bin/bash VAR1=" Linuxize " VAR2="Linuxize" if]; then echo "Strings are equal." else echo "Strings are not equal." fi ## Using xargs to trim VAR1 if]; then echo "Strings are equal." else echo "Strings are not equal." fi

Strings are not equal. Strings are equal.

Phần kết luận

xargs là một tiện ích dòng lệnh trên Linux cho phép bạn xây dựng và thực thi các lệnh.

Để biết thêm thông tin chi tiết về từng tùy chọn xargs , hãy đọc trang man xargs.

thiết bị đầu cuối xargs