З мого розуміння, саме таке повинно означати саме те саме:
ls -1 | xargs file {}
ls -1 | xargs -I{} file {}
якщо параметр -I не вказаний, він за замовчуванням до -I {}.
Я хочу перерахувати всі файли в поточному каталозі і запустити file
команду на кожному з них. Деякі мають пробіли у своїх назвах. Однак я помітив різницю. Дивіться нижче:
$ 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 {}, заголовки в іменах файлів обробляються як очікується.
xargs file
або xargs -I{} file {}
. Не повинно бути xargs file {}
. Я думаю, коли чітко вказувати -I {}, баш буде трактувати це як file "Hello World"
. Без -I {} це трактується як file Hello World
.
-1
варіант для цього ls
, але він за замовчуванням увімкнено, коли на виході ls
є файл або труба, тому вам тут це не потрібно. (3) Ви плутаєте -I
з застарілим -i
(нижчим регістром I
) варіантом. -ifoo
еквівалентний -Ifoo
, але звичайний -i
еквівалент -I{}
. Але використовуйте -I{}
. (4) Якщо ви дійсно хочете робити те, що ви кажете, що хочете зробити, чому б просто не сказати file *
?
file
їх. Але я придумав простіший приклад, використовуючи ls
. Ти правий. Для цього file *
найкраще.
-exec
.