Theo hiểu biết của tôi, những điều sau đây có nghĩa chính xác như nhau:
ls -1 | xargs file {}
ls -1 | xargs -I{} file {}
nếu tùy chọn -I không được chỉ định, nó được mặc định là -I {}.
Tôi muốn liệt kê tất cả các tệp trong thư mục hiện tại và chạy file
lệnh trên mỗi tệp. Một số có không gian trong tên của họ. Tuy nhiên, tôi nhận thấy sự khác biệt. Xem bên dưới:
$ ls -1
Hello World
$ ls -1 | xargs file {}
{}: ERROR: cannot open `{}' (No such file or directory)
Hello: ERROR: cannot open `Hello' (No such file or directory)
World: ERROR: cannot open `World' (No such file or directory)
$ ls -1 | xargs -I{} file {}
Hello World: directory
Với -I {} được chỉ định rõ ràng, khoảng trắng trong tên tệp được xử lý như mong đợi.
xargs file
hoặc xargs -I{} file {}
. Không nên xargs file {}
. Tôi đoán khi chỉ định rõ ràng -I {}, bash sẽ coi nó là file "Hello World"
. Không có -I {}, nó được coi là file Hello World
.
-1
tùy chọn này ls
, nhưng nó được bật theo mặc định khi đầu ra của ls
một tệp hoặc một đường ống, vì vậy bạn không cần nó ở đây. (3) Bạn đang nhầm lẫn -I
với tùy chọn không dùng nữa -i
(chữ thường I
). -ifoo
là tương đương với -Ifoo
, nhưng đồng bằng -i
là tương đương với -I{}
. Nhưng sử dụng -I{}
. (4) Nếu bạn thực sự muốn làm những gì bạn nói bạn muốn làm, tại sao không chỉ nói file *
?
file
trên chúng. Nhưng tôi đã đưa ra một ví dụ đơn giản hơn bằng cách sử dụng ls
. Bạn đúng rồi. Đối với điều đó, file *
là tốt nhất.
-exec
.