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 fileBefehl 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 fileoder 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.
-1Option kennen ls, aber sie ist standardmäßig aktiviert, wenn die Ausgabe von lseine Datei oder eine Pipe ist, sodass Sie sie hier nicht benötigen. (3) Sie verwechseln -Imit der veralteten Option -i(Kleinbuchstaben I). -ifooist gleichbedeutend mit -Ifoo, aber schlicht -iist 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.