Depois de usar os sistemas Windows há muito tempo, sei que em um determinado momento, uma janela de erro pode aparecer quando os nomes de arquivos e pastas se tornam muito longos.
Isso aconteceu comigo quando tentei fazer backup de arquivos com SFTP de um servidor para uma pasta (por exemplo):
D:(Windows drive partition)/Temporary/Projects/2015-06/Websites/Guitar-Site/Images/Logos/Manufacturers/Instruments/Basses/(long file name).png
Como você pode ver, às vezes tenho a tendência de criar caminhos de pastas muito especificados e, se um nome de arquivo também for longo, o NTFS poderá não conseguir salvá-lo dessa maneira.
No momento, estou preocupado com meus backups físicos, pois o caminho da pasta na minha unidade de backup será adicionado /backups/(drive name)/...
a todos os caminhos de arquivo.
Existe algum limite (ou similar) no ext4 / Ubuntu que eu precisaria procurar?
files
filesystem
directory
filename
Prototype700
fonte
fonte
Respostas:
O comprimento máximo do nome do arquivo é 255 bytes. Encontrado na página wiki do ext4 .
E um caminho máximo de 4096 caracteres. Encontrado nesta pergunta sobre Unix e Linux SE .
Embora, eu encontrei este artigo wiki que não especifica o caminho máximo do arquivo no ext4.
fonte
jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -c 7 jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -m 7
-m está contando caracteres e -c está contando bytes. A razão pela qual é 7 em vez de 6 é o caractere de fim de linha que não é impresso. Assim, os caracteres totais no nome do arquivo vai ser 255.4
paraecho -n "💩" | wc -c
. Criar um nome de arquivo chamado com esse nome levaria 4 bytes, apesar de esse nome de arquivo ter 1 grafema. Um "caractere" não é um conceito claramente definido (geralmente significa byte, grafema ou ponto de código UNICODE).len(filename.encode())
.Acredito que a maneira mais confiável de determinar isso é com a
pathconf(".", _PC_PATH_MAX);
função POSIX, que determina o caminho máximo para um determinado caminho.Como a função sugere, isso pode variar entre os sistemas de arquivos.
Eu não sei de um utilitário de linha de comando que o expõe. Aqui está um exemplo mínimo de C: /programming/16285623/how-to-get-the-to-get-path-to-the-current-file-pwd-in-linux-from-c / 54155296 # 54155296
fonte
Os limites do nome do caminho dependem do sistema de arquivos em uso. A resposta de jtoscarson cobre ext4, que é o padrão no Ubuntu, no entanto, você pode usar vários sistemas de arquivos no Ubuntu. Para citar a resposta do WerkkreW na falha do servidor , aqui estão alguns dos sistemas de arquivos e seus limites:
Observe também que vários sistemas de arquivos têm limitações quanto ao tipo de caractere que pode estar presente no nome do arquivo. Por exemplo, os nomes de arquivos em
ext4
não podem conter NULL e/
. Consulte também o artigo da Wikipedia para comparações de sistemas de arquivos .Observe também que os sistemas de arquivos Linux precisam levar em consideração as definições do POSIX :
De limits.h :
fonte
Como @ sergiy-kolodyazhnyy disse, o tamanho máximo do nome do arquivo dependerá do sistema de arquivos e a grande maioria limita o tamanho do arquivo a 255 bytes.
Uma omissão notável de seu gráfico é a mídia ótica. Embora as extensões UDF e Rock Ridge tenham o mesmo limite de 255 caracteres para nomes de arquivos, a ISO9660 sem Rock Ridge e Joliet possuem limites muito mais rígidos com os quais você pode se deparar se estiver fazendo algo como fazer backup de
youtube-dl
downloads.Os nomes de arquivos Joliet são limitados a 64 pontos de código UTF-16 ou 103 deles, se o programa de masterização de discos tiver a opção de interromper as especificações de maneiras que, aparentemente, não causem danos na prática.
Da mesma forma, os níveis 2 e 3 da ISO 9660, sem as extensões Rock Ridge, são limitados a nomes de arquivos com 31 ou 37 caracteres, se você estiver jogando rápido e livre com as especificações.
A ISO 9660: 1999, que é suportada pela imagem genérica, mas não por front-ends como o K3b, tem um limite de 207 bytes (sem Rock Ridge) ou 197 bytes (com Rock Ridge).
(Fonte: A página de
genisoimage
manual)Quanto ao tamanho máximo do caminho , esse é um grande equívoco. Não existe um para a maioria dos sistemas de arquivos Linux.
Há uma constante chamada
PATH_MAX
, mas é apenas o máximo para certas APIs POSIX , que você pode trabalhar em torno .As únicas exceções consequentes a esta convenção "sem limite no comprimento do caminho" são FAT32 e exFAT (32.760 caracteres Unicode), NTFS e ReFS (32.767 caracteres Unicode), UDF (1.023 bytes) e ISO 9660 (claro, mas já vi indicado como 180, 207, 212 ou 222 bytes).
Isso pode ser facilmente demonstrado executando este pequeno programa Python e depois explorando os diretórios resultantes.
Meu
bash
, que exibe todo o caminho no prompt, terá problemas com ele. No entantozsh
, meu , que exibe apenas a pasta atual no prompt, não terá problemas e ainda possui umpwd
built-in que pode exibir todo o caminho de 5000 + bytes sem problemas.fonte