O tempo de acesso e a hora da alteração não são armazenados na estrutura do cpio newc. O que é, no entanto, é o número do inode e o número do dispositivo do sistema de arquivos.
struct cpio_newc_header { char c_magic[6]; char c_ino[8]; char c_mode[8]; char c_uid[8]; char c_gid[8]; char c_nlink[8]; char c_mtime[8]; char c_filesize[8]; char c_devmajor[8]; char c_devminor[8]; char c_rdevmajor[8]; char c_rdevminor[8]; char c_namesize[8]; char c_check[8]; };
Você pode replicar números de inode consistentemente extraindo os arquivos em um novo sistema de arquivos a cada vez, mas você não poderá ter duas estruturas de diretório separadas que existam no mesmo ponto no tempo produzindo o mesmo arquivo cpio que a combinação de dev + ino é por design exclusivo em um determinado sistema.
Para produzir um arquivo cpio consistente, você precisaria criar um novo sistema de arquivos a cada vez, e garantir que ele recebesse o mesmo número de dispositivo, e garantir que cada arquivo recebesse o mesmo número de inode a cada vez.
Ou, como alternativa, você poderia pós-processar o arquivo cpio resultante para substituir os números de dispositivo e inode. Algo como:
printf '%s
struct cpio_newc_header {
char c_magic[6];
char c_ino[8];
char c_mode[8];
char c_uid[8];
char c_gid[8];
char c_nlink[8];
char c_mtime[8];
char c_filesize[8];
char c_devmajor[8];
char c_devminor[8];
char c_rdevmajor[8];
char c_rdevminor[8];
char c_namesize[8];
char c_check[8];
};
' **/*(D) | bsdcpio -0 -o -H newc | perl -0777 -pe '
$dev = sprintf("%016x", 1);
while (substr($_, 0, 6) eq "070701") {
($inode, $size, $nsize) = map hex, unpack("x6a8x40a8x32a8", $_);
$nsize += (2-$nsize) % 4; $size += (-$size) % 4;
$inode{$inode} ||= ++$n;
substr($_, 6, 8) = sprintf("%08x", $inode{$inode});
substr($_, 62, 16) = $dev;
print substr($_, 0, 110+$size+$nsize, "")
}'
Onde o dev é codificado como 1
e inode é incrementado de 1 para cada entrada (mas ainda é igual para hardlinks).
Usando zsh
' **/*(D)
para obter uma lista classificada de caminhos de arquivo em vez de find
, cuja ordem não é garantida como consistente.