web-dev-qa-db-fra.com

Est-ce que gzip accepte stdin?

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?

4
Sinoosh

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.

12
Byte Commander