Lorsque je dirige vers gzip
, il ne peut pas accepter stdin. Je devrais utiliser xargs
pour convertir stdin en argument.
$ls
1.txt
$ls |xargs gzip && ls
1.txt.gz
tout va bien . mais quand je veux compresser un fichier d'archive cpio
$ls | cpio -ov | gzip > archive.cpio.gz
aussi c'est ok et ce ls | cpio -ov | xargs gzip
ne fonctionne pas.Pourquoi dans la deuxième situation gzip
accepter stdin et il ne peut pas accepter l'argument?
Il y a une différence entre arguments de ligne de commande et entrée standard.
gzip
accepte noms de fichiers comme arguments. Il lira les données brutes des fichiers spécifiés et les compressera. Si vous avez une commande produisant une liste de noms de fichiers, vous pouvez utiliser xargs
pour transmettre ces noms de fichiers à gzip
comme arguments de ligne de commande.
Toutefois, si aucun argument de fichier n'est passé à gzip
, il lit par défaut ses données brutes à partir de entrée standard et affiche le résultat compressé dans la sortie standard. Si vous souhaitez compresser une commande générant des données brutes, vous pouvez la diriger vers gzip
.