З мого розуміння, саме таке повинно означати саме те саме:
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.