Sua pergunta não diz de onde vêm os valores anteriores conhecidos. Eu suponho que você tenha uma árvore paralela para a árvore content
chamada ../oldcontent
. Ajuste para se adequar:
#!/bin/bash
echo "Checking directories for proper extensions"
for d in documents media pictures other
do
nfc=$(find content/$d -type f | wc -l)
ofc=$(find ../oldcontent/$d -type f | wc -l)
if [ $nfc -eq $ofc ]
then
echo The "$d" directory has as many files as before.
elif [ $nfc -lt $ofc ]
then
echo There are fewer files in the content directory than before.
else
echo There are more files in the content directory than before.
fi
done
Este código é muito mais curto porque não tenta dar um comando find
diferente em cada loop. Se você realmente precisar disso, use uma matriz associativa para associar nomes de diretório e find
argumentos:
declare -A dirs=(
[documents]="-name \*.txt -o -name \*.doc -o -name \*.docx"
[media]="-name \*.gif"
[pictures]="-name \*.jpg -o -name \*.jpeg"
[other]=""
)
Em seguida, o loop for
se torna:
for d in "${!dirs[@]}"
do
nfc=$(find content/$d -type f ${dirs[$d]} | wc -l)
ofc=$(find ../oldcontent/$d -type f ${dirs[$d]} | wc -l)
...
Isso só funciona no Bash 4 e acima, no entanto. Existe um mecanismo de matriz associativa menos potente no Bash 3, mas está muito quebrado por design. Se você não tem o Bash 4 em mãos, eu o encorajo a mudar para algo como Perl, Python ou Ruby ao invés de tentar armar as matrizes associativas do Bash 3 para o serviço por algo como isto.
Tenha em atenção que isto não lhe diz que a árvore content
contém os mesmos ficheiros que ../oldcontent
, apenas que cada subdirectório tem o mesmo número de ficheiros. Se você estiver tentando detectar alterações nos arquivos de cada árvore, será necessário usar rsync
ou minha solução " MD5 um diretório " aqui no Unix.SE.