Je suis sur le point de compresser un grand répertoire et je veux savoir exactement quelle sera la taille du fichier résultant.
J'ai essayé d'utiliser du
:
$ tar -cv dir | du -h -
du: cannot access '-': No such file or directory
J'ai ensuite essayé d'utiliser la version de fichier de '-':
$ tar -cv dir | du -h /dev/stdin
1.0K
Je suis certain que ce nombre n'est pas exact. Comment puis-je obtenir la taille de stdin?
wc
le superflu,-
vous n'avez pas non plus besoin de lacut
commande suivante .Avec GNU,
tar
vous pouvez simplement faire:... qui rendra la sortie comme ...
... sur stderr. De même, avec n'importe quel tar (ou flux) que vous pouvez utiliser
dd
pour fournir un rapport sur le nombre d'octets. Cela peut être préférable ou nonwc
, mais pardd
défaut à une taille de bloc de 512 octets - qui est identique àtar
la taille de bloc de. Si le PIPE_BUF de votre système est suffisamment grand, vous pouvez même étendredd
la taille de bloc de la correspondance avectar
la taille d'enregistrement de - qui est de 20 blocs ou 10240 octets. Comme ça:Cela peut ou non offrir une solution plus performante que
wc
.Dans les deux
dd
et lestar
cas d' utilisation vous ne devez pas disposer réellement du cours d' eau, cependant. Je redirige vers/dev/null
ci-dessus - mais j'aurais pu aussi facilement rediriger vers un fichier et toujours recevoir le rapport sur sa taille au moment où il a été écrit.la source
dd
(par rapport àwc
).dd
la sortie est transmise - à un compresseur, par exemple - et pour une raison quelconque, vous trouvez souhaitable de connaître à la fois la taille brute de l'archive et celle compressée. Il est également utile d'obtenir un rapport instantané sur le nombre d'enregistrements - cetar
n'est pas seulement une archive, mais un format de flux. Il peut être utilisé autrement que simplement en enregistrant dans un groupe de fichiers dans un autre fichier. Il est souvent utile pour bloquer un flux avant de le modifier. À chacune de ces limites d'enregistrement se trouve un bloc entier de NUL.Je suggère:
Un simple
c
(aucun interligne-
n'est requis) est utilisé pour créer unetar
archive,f
spécifie un fichier de sortie et-
indique qu'il s'agit d' une sortie standard . (Notez que si vous voulez juste la taille et il y a beaucoup de fichiers sous dir vous pouvez plutôt Omettretar
« sv
pour des raisons de performance.)la source
tar
s dans le passé où la spécification d'un fichier tar (doncf
et-
) était nécessaire. - Je viens de le chercher; sansf
-
letar
supposé/etc/mt0
par défaut./etc/mt0
qui signifie réellement - "bande magnétique" ;-) Je serais intéressé par letar
comportement de Solaris (parce que Solaris est l'un des systèmes d'exploitation contemporains connus pour contenir encore des choses très anciennes/bin
).-f
drapeautar
?Le libellé de votre question se prête aux
tar ... | wc -c
réponses ci-dessus. J'ai lu à l'origine votre question en supposant silencieusement que vous vouliez que la taille soit signalée lors de la création du fichier tar (peut-être que la sortie de tar était alors acheminée via une liaison réseau?).Dans ce cas, je suggère
pv
- visionneuse de tuyaux. J'en ai vu des références mais je n'ai pas encore eu l'occasion de jouer avec.Références
la source