Anladığım kadarıyla, aşağıdakiler tamamen aynı anlama gelmelidir:
ls -1 | xargs file {}
ls -1 | xargs -I{} file {}
-I seçeneği belirtilmezse, varsayılan olarak -I {} olarak ayarlanır.
Geçerli dizindeki tüm dosyaları listelemek ve file
her birinde komut çalıştırmak istiyorum . Bazılarının isimlerinde boşluklar var. Ancak farkı fark ettim. Aşağıya bakınız:
$ 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
-I {} açıkça belirtildiğinde, dosya adlarındaki boşluklar beklendiği gibi işlenir.
xargs file
veya xargs -I{} file {}
. Olmamalı xargs file {}
. Açıkça -I {} belirtirken, bash bunu ele alacaktır file "Hello World"
. -I {} olmadan file Hello World
,.
-1
Seçeneği bilmeniz iyi ls
, ancak çıktısı ls
bir dosya veya bir boru olduğunda varsayılan olarak açıktır, bu yüzden burada buna ihtiyacınız yoktur. (3) Kullanımdan -I
kaldırılmış -i
(küçük harf I
) seçenekle karıştırıyorsunuz. -ifoo
eşittir -Ifoo
, ancak düz -i
eşittir -I{}
. Ama kullanın -I{}
. (4) Gerçekten söylemek istediğiniz şeyi yapmak istiyorsanız, neden sadece söylemiyorsunuz file *
?
file
üzerinde çalıştırmak için xargs -I {} dosya {} ` . Ama kullanarak daha basit bir örnek buldum ls
. Haklısın. Bunun için file *
en iyisi.
-exec
.