Sé que puedo usar ls -lat
para averiguar cuántos bytes tiene un archivo y luego multiplicar por 8 para averiguar cuántos bits. ¿Pero es esto posible en una sola línea de comando?
Sé que puedo usar ls -lat
para averiguar cuántos bytes tiene un archivo y luego multiplicar por 8 para averiguar cuántos bits. ¿Pero es esto posible en una sola línea de comando?
Respuestas:
Con GNU du
:
du -b FILE | awk '{ print $1, "* 8" }' | bc
bc
, awk
puede hacer matemáticas por sí mismo:du -b FILE | awk '{print $1 * 8}
wc -c < FILE
para un equivalente portátil (para archivos no regulares, sin embargo, tiene el efecto secundario de leerlos)
Una solución shell + GNU coreutils:
echo $(( 8 * $(stat -c%s FILE) ))
La -c%s
opción de stat
devolver solo el tamaño del archivo en bytes, eliminando cualquier necesidad de procesamiento de texto adicional. Esta sintaxis es compatible con GNU coreutils y, por lo tanto, debería funcionar en la mayoría de las distribuciones de Linux.
Como excepción en Linux, si uno está ejecutando zsh con el módulo opcional zsh / stat, entonces se necesita especificar una ruta para obtener los coreutils de GNU:
echo $(( 8 * $(command stat -c%s FILE) ))
Con GNU find
(anterior a GNU stat
por décadas):
find file -prune -printf '%s*8\n' | bc
Relativamente portátil:
ls -ld -- "$file" | awk '{print $5*8;exit}'
Es posible en una línea, porque puede poner varios comandos en una línea, por ejemplo, conectados por tuberías o sustituciones de comandos:
echo $(stat -c %s FILE) '* 8' | bc
(Gracias @frostschutz por la actualización).
ZSize: 5
stat -c %s FILE
imprimir tamaño directamente, en lugar de la sed
?
Archivo único:
wc -c yourfile | awk '{print $1*8}'
Múltiples archivos:
wc -c yourfile1 yourfile2 | awk '{$1*=8; print $0}'
Este también funciona para un solo archivo. Sin embargo, no es completamente a prueba de balas, vea el comentario de Stephane .
Estos son comandos compatibles con el estándar POSIX.
a b
archivo como a b
(secuencias de espacios en blanco convertidos en un solo espacio, espacios en blanco eliminados).
NR == 1