Probablemente haya un truco simple para hacer esto, pero no puedo entenderlo desde la página de manual.
¿Cómo corto el último 1 MB del archivo con un tamaño indeterminado, por ejemplo, mediante el uso dd
?
Probablemente haya un truco simple para hacer esto, pero no puedo entenderlo desde la página de manual.
¿Cómo corto el último 1 MB del archivo con un tamaño indeterminado, por ejemplo, mediante el uso dd
?
Respuestas:
Bueno, suponiendo que tenga stat
y bash
, puede obtener el tamaño del archivo con:
stat -c %s your_file
Si desea extraer los últimos $amount
bytes para ese archivo dd
, puede:
dd if=your_file of=extracted_part \
bs=1 count=$amount \
skip=$(( $(stat -c %s your_file) - $amount ))
Pero el enfoque más sensato sería usar tail
:
tail -c $(( 1024*1024 )) your_file > target_file
-c
opción para head
?
dd --help Uso: dd [OPERAND] ... o: dd OPCIÓN Copie un archivo, convirtiéndolo y formateándolo de acuerdo con los operandos. bs = BYTES lee y escribe BYTES bytes a la vez (vea también ibs =, obs =) cbs = BYTES convierte bytes BYTES a la vez conv = CONVS convierte el archivo según la lista de símbolos separados por comas count = BLOCKS copia solo BLOCKS bloques de entrada ibs = BYTES lee bytes BYTES a la vez (predeterminado: 512) if = FILE lee de FILE en lugar de stdin iflag = BANDERAS leídas según la lista de símbolos separados por comas obs = BYTES escribe bytes BYTES a la vez (por defecto: 512) of = FILE escribe en FILE en lugar de stdout oflag = FLAGS escribe según la lista de símbolos separados por comas seek = BLOCKS omite BLOCKS bloques de tamaño obs en el inicio de la salida skip = BLOCKS skip BLOCKS bloques de tamaño ibs al inicio de la entrada status = noxfer suprimir estadísticas de transferencia Los BLOQUES y BYTES pueden ir seguidos de los siguientes sufijos multiplicativos: c = 1, w = 2, b = 512, kB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024, xM = M GB = 1000 * 1000 * 1000, G = 1024 * 1024 * 1024, y así sucesivamente para T, P, E, Z, Y.
Si el tamaño del archivo es exactamente 10MB, 1024 * 10 10240K Esto dejará los últimos 1024K. Debe especificar el tamaño de bloque con el que está trabajando utilizando las opciones ibs y obs.
1M = 1024K
1024*9 = 9216
dd if=/10/MB/file of=/9/MB/file count=9216K ibs=1K obs=1K
dd if=/10/MB/file of=/9/MB/file count=9M ibs=1M obs=1M
También puede omitir el primer 1 MB de un archivo, utilizando la opción de omitir para leer hasta el final del archivo omitiendo el primer 1 MB.
dd if=/10/MB/file of=/9/MB/file skip=1M ibs=1M obs=1M
Usando la opción de búsqueda, puede escribir un a un lugar específico en su archivo de salida. Supongamos que desea conservar el primer 1 MB y sobreescribir los últimos 8 MB.
dd if=/10/MB/file of=/9/MB/file skip=1M seek=1M count=8M ibs=1M obs=1M
Probablemente necesite obtener algunos detalles sobre el tamaño de su archivo para asegurarse de obtener la cantidad correcta de datos dentro y fuera.
ls -s --block-size 1K ./my/10MB/file
hombre ls --block-size = TAMAÑO use bloques de tamaño de bytes. Vea el formato de TAMAÑO a continuación -s, --size imprime el tamaño asignado de cada archivo, en bloques TAMAÑO puede ser (o puede ser un número entero opcionalmente seguido por) uno de los siguientes baja: KB 1000, K 1024, MB 1000 * 1000, M 1024 * 1024, y así sucesivamente para G, T, P, E, Z, Y.