Maneira segura de determinar o tamanho de um arquivo usando ferramentas unix?

2

Gostaria de saber qual é a melhor maneira de determinar o tamanho de um arquivo usando ferramentas comuns do Unix. Eu preciso determinar o tamanho de um arquivo em bytes em um script de shell. O problema é que o shell script precisa ser portável em diferentes sistemas operacionais como o osx, irix, linux - o que diz: usar o comando "stat" pode não funcionar bem, porque os argumentos necessários para obter o resultado que eu quero são diferentes em quase todos os sistemas operacionais.

Eu tentei usar:

cat ... | wc -c

e enquanto isso parece funcionar muito bem, eu provavelmente vou ter problemas em um ambiente multibyte, não vou? Então, o que é uma boa maneira de fazer isso?

    
por harald 19.12.2011 / 13:07

5 respostas

2

Para este propósito, você pode usar o seguinte:

du --block-size=1 filename

Eu não tenho ideia sobre sua portabilidade. Na página man do comando, ele está listado como Pacote GNU coreutils.

Se você quiser determinar o tamanho do arquivo, em vez do espaço necessário para o disco, adicione - tamanho-aparente .

    
por 19.12.2011 / 13:21
2

cksum FILE

De wikipedia

Interoperability

The standard cksum command, as found on most UNIX-like OS (including GNU/Linux, *BSD, Mac OS X, and Solaris) uses a CRC algorithm based on the ethernet standard frame check and is therefore interoperable between implementations

é claro que a interoperabilidade é mencionada para a soma de verificação e NÃO para o contando parte de bytes.

    
por 19.12.2011 / 17:30
1

stat -c %s /path/to/filename

    
por 19.12.2011 / 14:16
0

ls e awk são bastante padrão. Você pode tentar

ls -l file | awk '{print $5}'
    
por 19.12.2011 / 13:14
0
man wc

Print newline, word, and byte counts

user@machine:~$ ls -lh datefix.vim
-rw-r--r-- 1 user     group     264 2011-06-28 23:26 datefix.vim
user@machine:~$ wc datefix.vim
  6  12 264 datefix.vim
user@machine:~$ wc datefix.vim | awk '{print $3}'
264

wc não sabe ou se importa com o Unicode - ele acha que um byte é um byte. Eu também testei isso em um arquivo de 234 MB .lzma para provar isso ... então um simples wc -c também vai te dar o que você quer.

    
por 19.12.2011 / 17:40