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 staty bash, puede obtener el tamaño del archivo con:
stat -c %s your_file
Si desea extraer los últimos $amountbytes 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
-copció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.