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
.