Obtendo tamanhos de arquivo para uma lista grande de arquivos falha após n arquivos

0

Eu tentei descobrir como lidar com um problema no processamento de uma lista de arquivos grande.

Eu tenho uma lista de mais de 2000 arquivos. Quando eu tento colocá-los em um loop usando ls ou wc para obter o tamanho do arquivo para cada um, depois de n arquivos, o ls / wc falha. Parece que se eu colocar uma pausa por 2 segundos no lugar a cada 3-4 arquivos, ls / wc funciona.

Para compor o problema, também estou usando o rsh para executá-lo em um servidor remoto para que eu possa comparar os tamanhos de arquivo no servidor1 ao servidor2. No entanto, eu tenho o problema localmente quando não estou usando o rsh também, mas ele passa por mais da lista de arquivos antes de começar a falhar.

server="xy1"
for CompareList in 'cat compare_jnj.txt'
do
     rsh $server wc -c /u2/web/$CompareList.java |awk '{print " ",$1," ",$2}'|tr -s " " >> output.out
     rsh $server wc -c /u2/web/$CompareList.class |awk '{print " ",$1," ",$2}'|tr -s " " >> output.out
done

Minha lista de arquivos é uma lista estática de locais / nomes de arquivos sem a extensão do arquivo. Eu eliminei muito do que faço nele por razões de segurança, mas isso mostra os comandos de loop que estou usando:

Foi depois que eu o editei usando ls -l para obter o nome / tamanho do arquivo para exportar para um conjunto de resultados

    
por Bryan L 25.10.2017 / 18:07

2 respostas

3

Parece que seu script está analisando a saída de ls (ou wc ) apenas para obter uma lista de nomes de arquivos. Não faça isso; é uma idéia muito ruim.

Para obter uma lista simples de nomes de arquivos e seus tamanhos em bytes, você pode, por exemplo, usar:

stat -c '%n|%s' /path/to/directory/*

Ou para analisar uma árvore de diretórios:

find /path/to/directory -type f -exec stat -c '%n|%s' "{}" \;
    
por 25.10.2017 / 18:20
0

Este é o comando que geralmente executo em uma árvore de diretórios para listar os arquivos e seus tamanhos:

find <directory>/* -type f -print0 | xargs -0 -n1 du -h

Você também pode classificar por tamanho de arquivo (acho isso útil para meu trabalho):

find <directory>/* -type f -print0 | xargs -0 -n1 du -h | sort -n -r
    
por 25.10.2017 / 18:57

Tags