mv 'Lista de argumentos muito longa' para um único arquivo

4

Eu estava tentando mover um conjunto de 7 arquivos para o meu computador, via mv g* dir . A linha de comando moveu 6 deles, e o último arquivo deu o seguinte erro:

mv: g.tex: Argument list too long

Como os outros arquivos, antes e depois, já foram movidos, tentei mv g.tex dir . Mesmo erro. Mover outros arquivos funciona bem. (Nota: g.tex é um arquivo, não um diretório.)

Atualização: renomear o arquivo via mv também funciona bem; movê-lo para outro diretório na unidade USB também funciona bem. No entanto, mesmo quando eu renomeio ou movo para outro diretório na unidade USB, ainda não consigo movê-lo para o meu computador.

Eu tentei cat este arquivo, para copiar seu conteúdo para a área de trabalho:

cat: g.tex: Argument list too long

O que mais pode estar causando esse problema?

Atualização: depois de comparar a saída de dtruss com um arquivo que foi movido com sucesso, aqui estão as linhas do log que diferem:

read(0x3, "
#define E2BIG        7  /* Argument list too long */
", 0x20000) = -1 Err#7 write_nocancel(0x2, "mv:
read(0x3, "Beginning of file contents...", 0x20000)      = 0 0
fstat64_extended(0x3, 0x7FF1F5C02568, 0x7FF1F5C02660)        = 0 0
fstat64(0x4, 0x7FFF5A653EF0, 0x7FF1F5C02660)         = 0 0
fchmod(0x4, 0x180, 0x7FF1F5C02660)       = 0 0
__mac_syscall(0x7FFF8E670D02, 0x52, 0x7FFF5A653E70)      = -1 Err#93
flistxattr(0x4, 0x0, 0x0)        = 0 0
flistxattr(0x3, 0x0, 0x0)        = 23 0
flistxattr(0x3, 0x7FF1F5C02490, 0x17)        = 23 0
fgetxattr(0x3, 0x7FF1F5C02490, 0x0)      = 11 0
fgetxattr(0x3, 0x7FF1F5C02490, 0x7FF1F6001000)       = 11 0
fsetxattr(0x4, 0x7FF1F5C02490, 0x7FF1F6001000)       = 0 0
fstat64_extended(0x4, 0x7FFF5A653628, 0x7FF1F5C02660)        = 0 0
fchmod_extended(0x4, 0xFFFFFF9B, 0xFFFFFF9B)         = 0 0
fchmod(0x4, 0x0, 0xFFFFFF9B)         = 0 0
close(0x3)       = 0 0
fchown(0x4, 0x6300000063, 0x63)      = 0 0
fchmod(0x4, 0x81FF, 0x63)        = 0 0
fchflags(0x4, 0x0, 0x63)         = 0 0
utimes("/Users/aleksander/Desktop/Tex/new_filename
open("/dev/dtracehelper
-rwxrwxrwx 1 username staff 159939 Aug 15 11:54 g.tex
", 0x2, 0x7FFF53E619B0) = 3 0 ioctl(0x3, 0x80086804, 0x7FFF53E61938) = 0 0 close(0x3) = 0 0 thread_selfid(0x3, 0x80086804, 0x7FFF53E61938) = 167920154 0 bsdthread_register(0x7FFF8E8710F4, 0x7FFF8E8710E4, 0x2000) = 1073741919 0 ulock_wake(0x1, 0x7FFF53E6116C, 0x0) = -1 Err#2 issetugid(0x1, 0x7FFF53E6116C, 0x0) = 0 0 mprotect(0x10BDA5000, 0x88, 0x1) = 0 0 mprotect(0x10BDA7000, 0x1000, 0x0) = 0 0 mprotect(0x10BDBD000, 0x1000, 0x0) = 0 0 mprotect(0x10BDBE000, 0x1000, 0x0) = 0 0 mprotect(0x10BDD4000, 0x1000, 0x0) = 0 0 mprotect(0x10BDD5000, 0x1000, 0x1) = 0 0 mprotect(0x10BDA5000, 0x88, 0x3) = 0 0 mprotect(0x10BDA5000, 0x88, 0x1) = 0 0 getpid(0x10BDA5000, 0x88, 0x1) = 28838 0 stat64("/AppleInternal/XBS/.isChrooted
/dev/disk5s1 on /Volumes/NO NAME (msdos, local, nodev, nosuid, noowners)
", 0x7FFF53E61028, 0x1) = -1 Err#2 stat64("/AppleInternal
mv: g.tex: Argument list too long
", 0x7FFF53E610C0, 0x1) = -1 Err#2 csops(0x70A6, 0x7, 0x7FFF53E60B50) = 0 0 sysctl([CTL_KERN, 14, 1, 28838, 0, 0] (4), 0x7FFF53E60CA8, 0x7FFF53E60CA0, 0x0, 0x0) = 0 0 ulock_wake(0x1, 0x7FFF53E610D0, 0x0) = -1 Err#2 csops(0x70A6, 0x7, 0x7FFF53E60430) = 0 0 stat64("/Users/aleksander/Desktop/Tex
read(0x3, "
#define E2BIG        7  /* Argument list too long */
", 0x20000) = -1 Err#7 write_nocancel(0x2, "mv:
read(0x3, "Beginning of file contents...", 0x20000)      = 0 0
fstat64_extended(0x3, 0x7FF1F5C02568, 0x7FF1F5C02660)        = 0 0
fstat64(0x4, 0x7FFF5A653EF0, 0x7FF1F5C02660)         = 0 0
fchmod(0x4, 0x180, 0x7FF1F5C02660)       = 0 0
__mac_syscall(0x7FFF8E670D02, 0x52, 0x7FFF5A653E70)      = -1 Err#93
flistxattr(0x4, 0x0, 0x0)        = 0 0
flistxattr(0x3, 0x0, 0x0)        = 23 0
flistxattr(0x3, 0x7FF1F5C02490, 0x17)        = 23 0
fgetxattr(0x3, 0x7FF1F5C02490, 0x0)      = 11 0
fgetxattr(0x3, 0x7FF1F5C02490, 0x7FF1F6001000)       = 11 0
fsetxattr(0x4, 0x7FF1F5C02490, 0x7FF1F6001000)       = 0 0
fstat64_extended(0x4, 0x7FFF5A653628, 0x7FF1F5C02660)        = 0 0
fchmod_extended(0x4, 0xFFFFFF9B, 0xFFFFFF9B)         = 0 0
fchmod(0x4, 0x0, 0xFFFFFF9B)         = 0 0
close(0x3)       = 0 0
fchown(0x4, 0x6300000063, 0x63)      = 0 0
fchmod(0x4, 0x81FF, 0x63)        = 0 0
fchflags(0x4, 0x0, 0x63)         = 0 0
utimes("/Users/aleksander/Desktop/Tex/new_filename
open("/dev/dtracehelper
-rwxrwxrwx 1 username staff 159939 Aug 15 11:54 g.tex
", 0x2, 0x7FFF53E619B0) = 3 0 ioctl(0x3, 0x80086804, 0x7FFF53E61938) = 0 0 close(0x3) = 0 0 thread_selfid(0x3, 0x80086804, 0x7FFF53E61938) = 167920154 0 bsdthread_register(0x7FFF8E8710F4, 0x7FFF8E8710E4, 0x2000) = 1073741919 0 ulock_wake(0x1, 0x7FFF53E6116C, 0x0) = -1 Err#2 issetugid(0x1, 0x7FFF53E6116C, 0x0) = 0 0 mprotect(0x10BDA5000, 0x88, 0x1) = 0 0 mprotect(0x10BDA7000, 0x1000, 0x0) = 0 0 mprotect(0x10BDBD000, 0x1000, 0x0) = 0 0 mprotect(0x10BDBE000, 0x1000, 0x0) = 0 0 mprotect(0x10BDD4000, 0x1000, 0x0) = 0 0 mprotect(0x10BDD5000, 0x1000, 0x1) = 0 0 mprotect(0x10BDA5000, 0x88, 0x3) = 0 0 mprotect(0x10BDA5000, 0x88, 0x1) = 0 0 getpid(0x10BDA5000, 0x88, 0x1) = 28838 0 stat64("/AppleInternal/XBS/.isChrooted
/dev/disk5s1 on /Volumes/NO NAME (msdos, local, nodev, nosuid, noowners)
", 0x7FFF53E61028, 0x1) = -1 Err#2 stat64("/AppleInternal%pre%", 0x7FFF53E610C0, 0x1) = -1 Err#2 csops(0x70A6, 0x7, 0x7FFF53E60B50) = 0 0 sysctl([CTL_KERN, 14, 1, 28838, 0, 0] (4), 0x7FFF53E60CA8, 0x7FFF53E60CA0, 0x0, 0x0) = 0 0 ulock_wake(0x1, 0x7FFF53E610D0, 0x0) = -1 Err#2 csops(0x70A6, 0x7, 0x7FFF53E60430) = 0 0 stat64("/Users/aleksander/Desktop/Tex%pre%", 0x7FFF53E62B88, 0x7FFF53E60430) = 0 0 lstat64("g.tex%pre%", 0x7FFF53E62AF8, 0x7FFF53E60430) = 0 0 lstat64("/Users/aleksander/Desktop/Tex%pre%", 0x7FFF53E62A68, 0x7FFF53E60430) = 0 0 stat64("g.tex%pre%", 0x7FFF53E62AF8, 0x7FFF53E60430) = 0 0 stat64("/Users/aleksander/Desktop/Tex/g.tex%pre%", 0x7FFF53E62A68, 0x7FFF53E60430) = -1 Err#2 access("/Users/aleksander/Desktop/Tex/g.tex%pre%", 0x0, 0x7FFF53E60430) = -1 Err#2 rename("g.tex%pre%", "/Users/aleksander/Desktop/Tex/g.tex%pre%") = -1 Err#18 stat64("/%pre%", 0x7FFF53E5FB60, 0x7FFF53E60430) = 0 0 open_nocancel(".%pre%", 0x0, 0x1) = 3 0 fstat64(0x3, 0x7FFF53E5F900, 0x1) = 0 0 fcntl_nocancel(0x3, 0x32, 0x7FFF53E61980) = 0 0 close_nocancel(0x3) = 0 0 stat64("/Volumes/NO NAME%pre%", 0x7FFF5A00A870, 0x7FFF5A00C980) = 0 0 stat64("/Volumes/NO NAME%pre%", 0x7FFF5A00AB60, 0x7FFF5A00C980) = 0 0 getattrlist("/Volumes/NO NAME/g.tex%pre%", 0x7FFF8E715B04, 0x7FFF5A00C470) = 0 0 statfs64(0x7FFF5A00C980, 0x7FFF5A00CD88, 0x7FFF5A00C470) = 0 0 lstat64("g.tex%pre%", 0x7FFF5A00C8F0, 0x7FFF5A00C470) = 0 0 open("g.tex%pre%", 0x0, 0x0) = 3 0 open("/Users/aleksander/Desktop/Tex/g.tex%pre%", 0xE01, 0x0) = 4 0 fstatfs64(0x4, 0x7FFF5A00BFF8, 0x0) = 0 0
", 0x7FFF5A654860, 0x63) = 0 0
", 0x4) = 4 0 getrlimit(0x1008, 0x7FFF5A00BC78, 0x4) = 0 0 write_nocancel(0x2, "g.tex%pre%", 0x5) = 5 0 write_nocancel(0x2, ": %pre%", 0x2) = 2 0 write_nocancel(0x2, "Argument list too long\n%pre%", 0x17) = 23 0 unlink("/Users/username/Desktop/Tex/g.tex%pre%", 0x7FFF5A00B8A0, 0x17) = 0 0 close(0x3) = 0 0
", 0x7FFF53E62B88, 0x7FFF53E60430) = 0 0 lstat64("g.tex%pre%", 0x7FFF53E62AF8, 0x7FFF53E60430) = 0 0 lstat64("/Users/aleksander/Desktop/Tex%pre%", 0x7FFF53E62A68, 0x7FFF53E60430) = 0 0 stat64("g.tex%pre%", 0x7FFF53E62AF8, 0x7FFF53E60430) = 0 0 stat64("/Users/aleksander/Desktop/Tex/g.tex%pre%", 0x7FFF53E62A68, 0x7FFF53E60430) = -1 Err#2 access("/Users/aleksander/Desktop/Tex/g.tex%pre%", 0x0, 0x7FFF53E60430) = -1 Err#2 rename("g.tex%pre%", "/Users/aleksander/Desktop/Tex/g.tex%pre%") = -1 Err#18 stat64("/%pre%", 0x7FFF53E5FB60, 0x7FFF53E60430) = 0 0 open_nocancel(".%pre%", 0x0, 0x1) = 3 0 fstat64(0x3, 0x7FFF53E5F900, 0x1) = 0 0 fcntl_nocancel(0x3, 0x32, 0x7FFF53E61980) = 0 0 close_nocancel(0x3) = 0 0 stat64("/Volumes/NO NAME%pre%", 0x7FFF5A00A870, 0x7FFF5A00C980) = 0 0 stat64("/Volumes/NO NAME%pre%", 0x7FFF5A00AB60, 0x7FFF5A00C980) = 0 0 getattrlist("/Volumes/NO NAME/g.tex%pre%", 0x7FFF8E715B04, 0x7FFF5A00C470) = 0 0 statfs64(0x7FFF5A00C980, 0x7FFF5A00CD88, 0x7FFF5A00C470) = 0 0 lstat64("g.tex%pre%", 0x7FFF5A00C8F0, 0x7FFF5A00C470) = 0 0 open("g.tex%pre%", 0x0, 0x0) = 3 0 open("/Users/aleksander/Desktop/Tex/g.tex%pre%", 0xE01, 0x0) = 4 0 fstatfs64(0x4, 0x7FFF5A00BFF8, 0x0) = 0 0
", 0x7FFF5A654860, 0x63) = 0 0
", 0x4) = 4 0 getrlimit(0x1008, 0x7FFF5A00BC78, 0x4) = 0 0 write_nocancel(0x2, "g.tex%pre%", 0x5) = 5 0 write_nocancel(0x2, ": %pre%", 0x2) = 2 0 write_nocancel(0x2, "Argument list too long\n%pre%", 0x17) = 23 0 unlink("/Users/username/Desktop/Tex/g.tex%pre%", 0x7FFF5A00B8A0, 0x17) = 0 0 close(0x3) = 0 0

Da lista de códigos de erro Unix para read :

%pre%

Em uma jogada bem-sucedida, ela é exibida:

%pre%

Apenas para o caso de isso ajudar, o restante das linhas, que correspondem a um bem sucedido comando mv e ao com falha, logo antes do texto diferente citado acima:

%pre%

xattr -l g.tex não fornece nenhuma saída. ls -l g.tex de rendimentos:

%pre%

mount yields:

%pre%     
por Alex 15.08.2017 / 16:46

2 respostas

5

E2BIG não é um dos erros que read(2) pode retornar. Parece um bug no kernel.

Especulação pura, mas pode ser devido a alguma corrupção no sistema de arquivos e o driver macOS para o sistema de arquivos FAT retornando esse erro ao encontrar essa corrupção, que eventualmente chega ao retorno de read .

De qualquer forma, parece que você levou a investigação o mais longe possível. Indo mais além, seria necessário dissecar o sistema de arquivos e o código do driver do kernel.

Você poderia dar uma olhada nos logs do kernel para ver se há mais informações lá. Você poderia tentar montar o FS em um sistema operacional diferente. Ou use o GNU mtools para acessar o sistema de arquivos FAT.

Você também pode relatar o problema à Apple como, pelo menos, um problema de documentação (para incluir o E2BIG como um dos possíveis códigos de erro e as condições sobre as quais ele pode ser retornado).

    
por 15.08.2017 / 19:25
2

Descobri como resolver isso. Eu instalei o GNU mv , via macPorts. Esse mv foi capaz de mover o arquivo da unidade USB para o meu computador, sem retornar o erro E2BIG. Eu gostaria de ter dtruss ed, para ver como ficou em torno do retorno de erro do read .

Descobrimos que o ponteiro do arquivo estava levemente corrompido - então, o arquivo que foi copiado começou 128 KB mais cedo do que deveria ter começado, mas o resto do arquivo estava intacto (claro , os últimos 128KB também foram cortados.)

Lição a ser aprendida: os utilitários nativos (BSD) em um Mac executam um algoritmo diferente de seus homólogos do GNU - então, quando um falha, sempre tente o outro.

    
por 16.08.2017 / 17:14