Script Bash para localizar o número de arquivos, diretórios e arquivos temporários em um diretório

0

Eu quero escrever um script de shell que conte o número de arquivos, diretórios e arquivos temporários em um diretório. O script abaixo gera um erro.

#!/bin/bash

cd '/home/Ubuntulover/Shell'

file=0
dir=0
temp=0
for d in *;
do
 for f in *;
 do
    if [ -d "$d" ]; then
        dir=$((dir+1))
    elif [ -f "$f" ]; then
        file=$((file+1))
    else
        temp=$((temp+1))
    fi
done
echo "Files $file"
echo "Directories $dir"
echo "Temporaryfiles $temp"
    
por UbuntuLover 20.12.2015 / 18:20

2 respostas

2

Você tem muitas instruções for : Como está, há uma variável de loop d contando todos os itens em um diretório e uma segunda variável de loop f fazendo isso novamente para cada arquivo presente - então se você tiver 4 arquivos então você terá 4 * 4 = 16 iterações (ou se o done estiver correto).

Você pode usar uma declaração como ls -l | wc -l para verificar rapidamente se a figura do estádio está OK.

Eu acho que isso é mais o que você quer:

#!/bin/bash

cd '/home/Ubuntulover/Shell'

file=0
dir=0
temp=0
for d in *;
do
  if [ -d "$d" ]; then
    dir=$((dir+1))
  elif [ -f "$d" ]; then
    file=$((file+1))
  else
    temp=$((temp+1))
  fi
done
echo "Files $file"
echo "Directories $dir"
echo "Temporaryfiles $temp"
    
por Mark Williams 20.12.2015 / 18:47
2

Você tem um erro de sintaxe, pois a done keyword está ausente no coentro mais alto for :

 #!/bin/bash

cd '/home/479153/Temp' || exit

file=0
dir=0
temp=0
for d in *;
do
    for f in *; # this loop actually not needed
     do
        if [ -d "$d" ]; then
            dir=$((dir+1))
        elif [ -f "$f" ]; then # can be replace as $d
            file=$((file+1))
        else
            temp=$((temp+1))
        fi
    done
done
echo "Files $file"
echo "Directories $dir"
echo "Temporaryfiles $temp"

Você sempre pode usar o site link para verificar o erro de sintaxe no seu código bash.

    
por snoop 20.12.2015 / 18:26