D'après ce que je comprends, ce qui suit devrait signifier exactement la même chose:
ls -1 | xargs file {}
ls -1 | xargs -I{} file {}
Si l'option -I n'est pas spécifiée, sa valeur par défaut est -I {}.
Je veux lister tous les fichiers du répertoire courant et lancer file commande sur chacun d'eux. Certains ont des espaces dans leurs noms. Cependant, j'ai remarqué la différence. Voir ci-dessous:
$ 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
Si -I {} est explicitement spécifié, les espaces dans les noms de fichiers sont traités comme prévu.
xargs file ou xargs -I{} file {}. Ne devrait pas être xargs file {}. Je suppose que quand spécifiant explicitement -I {}, le bash le traitera comme file "Hello World". Sans -I {}, il est traité comme file Hello World.
-1 option de ls, mais il est activé par défaut lorsque la sortie de ls est un fichier ou une pipe, vous n’en avez donc pas besoin ici. (3) Vous confondez -I avec les obsolètes -i (minuscule I ) option. -ifoo est équivalent à -Ifoo, mais simple -i est équivalent à -I{}. Mais utiliser -I{}. (4) Si vous voulez vraiment faire ce que vous dites vouloir, pourquoi ne pas simplement dire file *?
file sur eux. Mais je suis venu avec un exemple plus simple en utilisant ls. Tu as raison. Pour ça, file * est le meilleur.
-exec.