Scripts para verificação de arquivos

Seguem dois scripts para realizar ações muito comuns para quem trabalha com muitos arquivos: listar número de arquivos em vários diretórios de uma só vez e verificar se arquivos de texto estão com conteúdo. No segundo script, é realizado um for interessante: o avanço no nome dos diretórios e arquivos, em forma de data, se dá utilizando a função “date”.

Contagem de arquivos, diretórios e links

O script a seguir deve ser incluir o nome do diretório que contenha os subdiretórios onde será realizado o cálculo do número de arquivos, diretórios e links contidos em cada um. Caso o diretório a ser trabalhado não seja informado, as estatísticas serão geradas nos subdiretórios que estão no mesmo local do arquivo que está rodando.

#!/bin/bash
# Script para listar numero de arquivos em cada diretorio em até um subnivel

# Diretorio a ser trabalhado (pasta local se nao for informado)
pasta=$1

# Listar somente diretorios
for DIR in $(ls -d $pasta*/); do
	# Contar número de arquivos do diretório
	NUMDIR=$(ls -lR "$DIR" | grep '^d' | wc -l)
	NUMLIN=$(ls -lR "$DIR" | grep '^l' | wc -l)
	NUMARQ=$(ls -lR "$DIR" | grep '^-' | wc -l)
	# Imprimir saida
	echo "$DIR: $NUMDIR diretórios, $NUMARQ arquivos e $NUMLIN links simbólicos"
done

Note que são utilizadas duas formas para listar somente diretórios: a primeira considera que, ao listar diretórios, eles terminam com barra; já a segunda, ao realizar uma listagem completa, o primeiro caractere de uma linha contendo diretório é o “d”.

Verificar se arquivo está com ou sem conteúdo

O script a seguir varre os diretórios escritos em DIR (informado no próprio script) e realiza a verificação para ver se o arquivo tem conteúdo (‘if’ com parâmetro ‘-s’) ou está “zerado”.

#!/bin/bash
# Script para verificar se arquivos estão com dados

DIR='/home/user/dados'
cd $DIR

dia_ini="2015-07-13"
for n in $( seq 1 213 ); do
	folder=$(date --date="$dia_ini +$n days" +%Y-%m-%d)
	for i in $( seq 0 5 1439 ); do
		hm=$(date --date="0000 +$i minutes" +%H%M)
		file=$folder"_$hm.dat"
		if [ -s $DIR/$folder/alertas_$file ]; then
			echo $file "com conteúdo"
		else
			echo $file "arquivo zerado"
		fi
	done
done

Nesse caso, os diretórios possuem o nome como uma data seguindo a estrutura YYYY-MM-DD, contendo arquivos cujo nome segue a estrutura alertas_YYYY-MM-DD_HHMM.dat (“alertas_2015-07-13_2245.dat”, por exemplo). Assim, o loop para diretórios e o loop para arquivos envolvem criar uma sequência numérica avançando de 1 em 1 ou de 5 em 5 (segundo caso) para criar incrementos no tempo. Dessa forma, avança-se o nome do diretório 1 dia a cada loop e 5 minutos no loop interno.

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.