Echo / imprime os arquivos em um diretório, ecoa o tamanho dos arquivos e ecoa a quantidade de arquivos

0

Por favor ajude. Eu sou um estudante e encontrei esta questão on-line, tentando praticar e aprender.

Estou criando um programa que irá ecoar cada entrada em um determinado diretório. Se a entrada no diretório for um arquivo, ele irá ecoar seu tamanho. Se a entrada for um diretório, ele irá mostrar quantos itens estão nesse diretório. Meu programa abaixo irá ecoar os arquivos no diretório fornecido. Minha pergunta é como ecoar o tamanho dos arquivos e ecoar quantos itens no diretório. Meu programa abaixo

Obrigado!

#! /bin/bash
# Files Directory
read -p "Enter a Directory or File: " entry
target="$entry"
let count=0
for f in "$target"/*
do 
echo $(basename $f)
let count=count+1
done
echo "Files in the Directory: $count"
exit 0
    
por user280678 14.03.2018 / 16:03

1 resposta

0

Como você está aprendendo, aqui estão algumas orientações sobre suas perguntas, em oposição ao roteiro completo.

Há mais de uma maneira de obter o tamanho de um arquivo. Nos sistemas Linux, o stat utility é uma ótima opção, porque você pode perguntar diretamente pelos bytes:

bytes=$(stat -c %s -- "$f")

outra opção é o utilitário wc :

bytes=$(wc -c < "$f")

Note que você quer redirecionar o arquivo para wc ao invés do instintivo wc -c "$f" , já que o último formulário também mostrará o nome do arquivo, enquanto o primeiro (pois não sabe o nome do arquivo), simplesmente gera a contagem de bytes.

Para testar se um determinado arquivo é um arquivo ou diretório regular, o teste usual é:

if [ -d "$f" ]
then
  echo It is a directory
else
  echo It is not a directory
fi

Para contar o número de arquivos (não ocultos) em um diretório, você tem algumas opções:

  • use o utilitário set especificado pelo POSIX:

    set -- /path/to/dir/*;  echo "$#"
    
  • use um array (desde que você marcou o bash):

    files=( /path/to/dir/* )
    echo "There are ${#files[@]} files in there"
    

Estes contarão o número de "arquivos" (arquivos e diretórios) naquele diretório. O comportamento padrão na maioria dos shells é omitir arquivos de pontos (por exemplo, .bashrc ) ao expandir o * glob; você pode ajustar isso com o bash executando shopt -s dotglob ou shopt -u dotglob e verifique com shopt dotglob .

    
por 14.03.2018 / 17:20

Tags