Identifica se arquivos ou diretórios estão ocultos

0

Eu estou tentando escrever um script bash que imprime todos os arquivos (incluindo oculto) em um diretório de forma recursiva e registra o número de arquivos, arquivos ocultos, diretórios ocultos e diretórios. Isso faz parte de uma atribuição e não estou autorizado a usar -R ou find ou du .

listAllFiles() 
 {
  local dir=$1
  local file
  directoryCounter=0
  fileCounter=0
  hiddenFileCounter=0
  hiddenDirectoryCounter=0

  for file in "$dir"/*; do
  if [[ -d $file ]]; then
      listAllFiles "$file"
      directoryCounter+=1
  elif [[ -f $file ]];then
      fileCounter+=1]
      ls -l $file
  elif [[file is a hidden directory]];then
      listAllFile "$file"
      hiddenDirectoryCounter+=1
  elif [[file is a hidden file]];then
      hiddenFileCounter+=1
      ls -l $file
  fi
     done
 }

Existe uma maneira de detectar se um arquivo / diretório está oculto

    
por Joshua Twaites 28.11.2013 / 12:24

3 respostas

5

Os arquivos e diretórios ocultos têm nomes que começam com . , para que você possa usar a seguinte solução no Bash:

# Skip '.' and '..':
if [ "$file_name" = . ] || [ "$file_name" = .. ];then
    continue
fi
# Find hidden files:
if [[ "$file_name" =~ ^\. ]];then # if file name starts with a .
...
    
por 28.11.2013 / 12:33
2

Não há arquivos ou diretórios ocultos em sistemas de arquivos nativos do Unix, pelo menos não baseados em algum atributo atribuído nos metadados do sistema de arquivos.

O que é personalizado é que alguns comandos como ls , não exibem, por padrão, arquivos / diretórios onde o nome começa com um ' . '. Outras ferramentas (como, por exemplo, nautilus) seguem essa convenção. Se você olhar para a página de manual de ls , ele não escreve sobre arquivos ocultos:

-a, --all
     do not ignore entries starting with .

De acordo com wikipedia esse comportamento é resultado de um bug de software nos primeiros dias do Unix.

Outras ferramentas, como find , sempre exibirão esses arquivos ignorados por ls .

Nos sistemas de arquivos do Windows existem arquivos ocultos baseados em atributos, veja por exemplo esta pergunta.

Eu suspeito que parte de sua lição de casa é uma dica, já que as pessoas geralmente confundem o comportamento de esconder de ls com arquivos escondidos.

    
por 28.11.2013 / 12:48
0

find /directory_path -type f | wc -l fornecerá o número de arquivos

find /directory_path -type d | wc -l fornecerá o número de diretórios

    
por 28.11.2013 / 12:34