Secondo la mia comprensione, quanto segue dovrebbe significare esattamente lo stesso:
ls -1 | xargs file {}
ls -1 | xargs -I{} file {}
se l'opzione -I non è specificata, è predefinita -I {}.
Voglio elencare tutti i file nella directory corrente ed eseguire il file
comando su ciascuno di essi. Alcuni hanno spazi nei loro nomi. Tuttavia, ho notato la differenza. Vedi sotto:
$ 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
Con -I {} esplicitamente specificato, gli spazi vuoti nei nomi dei file vengono trattati come previsto.
xargs file
o xargs -I{} file {}
. Non dovrei essere xargs file {}
. Immagino che quando si specifica esplicitamente -I {}, la bash lo tratterà come file "Hello World"
. Senza -I {}, viene trattato come file Hello World
.
-1
opzione ls
, ma è attivo per impostazione predefinita quando l'output di ls
è un file o una pipe, quindi non è necessario qui. (3) Stai confondendo -I
con l' opzione deprecata -i
(minuscola I
). -ifoo
è equivalente a -Ifoo
, ma plain -i
è equivalente a -I{}
. Ma usa -I{}
. (4) Se vuoi davvero fare quello che dici di voler fare, perché non dire semplicemente file *
?
file
. Ma ho trovato un esempio più semplice usando ls
. Hai ragione. Per quello, file *
è il migliore.
-exec
.