Nach meinem Verständnis sollte Folgendes genau dasselbe bedeuten:
ls -1 | xargs file {}
ls -1 | xargs -I{} file {}
Wenn die Option -I nicht angegeben ist, wird standardmäßig -I {} verwendet.
Ich möchte alle Dateien im aktuellen Verzeichnis auflisten und den file
Befehl für jede einzelne ausführen . Einige haben Leerzeichen in ihren Namen. Ich bemerkte jedoch den Unterschied. Siehe unten:
$ 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
Wenn -I {} explizit angegeben wird, werden Leerzeichen in Dateinamen wie erwartet behandelt.
xargs file
oder angeben xargs -I{} file {}
. Sollte nicht sein xargs file {}
. Ich denke, wenn Sie -I {} explizit angeben, wird die Bash wie folgt behandelt file "Hello World"
. Ohne -I {} wird es als behandelt file Hello World
.
-1
Option kennen ls
, aber sie ist standardmäßig aktiviert, wenn die Ausgabe von ls
eine Datei oder eine Pipe ist, sodass Sie sie hier nicht benötigen. (3) Sie verwechseln -I
mit der veralteten Option -i
(Kleinbuchstaben I
). -ifoo
ist gleichbedeutend mit -Ifoo
, aber schlicht -i
ist gleichbedeutend mit -I{}
. Aber benutze -I{}
. (4) Wenn du wirklich tun willst, was du sagst, warum nicht einfach sagen file *
?
file
. Aber ich fand ein einfacheres Beispiel mit ls
. Du hast recht. Dafür file *
ist das beste.
-exec
.