Je sais que je peux utiliser ls -lat
pour savoir combien d'octets ont un fichier, puis multiplier par 8 pour savoir combien de bits. Mais est-ce possible dans une seule ligne de commande?
Je sais que je peux utiliser ls -lat
pour savoir combien d'octets ont un fichier, puis multiplier par 8 pour savoir combien de bits. Mais est-ce possible dans une seule ligne de commande?
Réponses:
Avec GNU du
:
du -b FILE | awk '{ print $1, "* 8" }' | bc
bc
- awk
peut faire des maths lui-même:du -b FILE | awk '{print $1 * 8}
wc -c < FILE
pour un équivalent portable (pour les fichiers non réguliers, cela a cependant pour effet secondaire de les lire)
Une solution shell + GNU coreutils:
echo $(( 8 * $(stat -c%s FILE) ))
L' -c%s
option de stat
retourne uniquement la taille du fichier en octets, éliminant ainsi tout besoin de traitement de texte supplémentaire. Cette syntaxe est prise en charge par GNU coreutils et devrait donc fonctionner sous la plupart des distributions Linux.
Par exception sur linux, si l'on exécute zsh avec le module zsh / stat optionnel, alors il faut spécifier un chemin pour obtenir les coreutils GNU:
echo $(( 8 * $(command stat -c%s FILE) ))
Avec GNU find
(antérieur à GNU stat
de plusieurs décennies):
find file -prune -printf '%s*8\n' | bc
Relativement portable:
ls -ld -- "$file" | awk '{print $5*8;exit}'
C'est possible sur une seule ligne, car vous pouvez mettre plusieurs commandes sur une même ligne, par exemple connectées par des tuyaux ou des substitutions de commande:
echo $(stat -c %s FILE) '* 8' | bc
(Merci @frostschutz pour la mise à jour).
ZSize: 5
par exemple
stat -c %s FILE
d'imprimer la taille directement, au lieu de la sed
?
Un seul fichier:
wc -c yourfile | awk '{print $1*8}'
Fichiers multiples:
wc -c yourfile1 yourfile2 | awk '{$1*=8; print $0}'
Celui-ci fonctionne également pour un seul fichier. Il n'est cependant pas complètement à l'épreuve des balles, voir le commentaire de Stéphane .
Ce sont des commandes conformes à la norme POSIX.
a b
fichier sous la forme a b
(séquences de blancs convertis en un seul espace, blancs de fin supprimés).
NR == 1