Z mojego zrozumienia, poniższe słowa powinny oznaczać dokładnie to samo:
ls -1 | xargs file {}
ls -1 | xargs -I{} file {}
jeśli nie podano opcji -I, domyślnie jest to -I {}.
Chcę wyświetlić listę wszystkich plików w bieżącym katalogu i uruchomić filepolecenie na każdym z nich. Niektóre mają spacje w swoich nazwach. Zauważyłem jednak różnicę. Patrz poniżej:
$ 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
Przy jawnym określeniu -I {} spacje w nazwach plików są traktowane zgodnie z oczekiwaniami.
xargs filealbo xargs -I{} file {}. Nie powinno być xargs file {}. Wydaje mi się, że kiedy wyraźnie podasz -I {}, bash potraktuje to jak file "Hello World". Bez -I {} jest traktowane jak file Hello World.
-1opcję ls, ale jest ona domyślnie włączona, gdy wyjściem lsjest plik lub potok, więc nie potrzebujesz go tutaj. (3) Mylisz się -Iz przestarzałą opcją -i(małe litery I). -ifoojest równoważne -Ifoo, ale zwykły -ijest równoważny -I{}. Ale użyj -I{}. (4) Jeśli naprawdę chcesz robić to, co mówisz, że chcesz robić, dlaczego po prostu nie powiedzieć file *?
fileje na nich. Ale wymyśliłem prostszy przykład, używając ls. Masz rację. Do tego file *jest najlepszy.
-exec.