Repetindo os arquivos de listagem no UNIX

0

Eu dei o comando:

ls -lrt

e os arquivos e diretórios listados são:

drwxr-xr-x   4 root root    4096 Feb  2  2014 abc
drwxr-xr-x   4 root root    4096 Feb  2  2014 cde
drwxr-xr-x   4 root root    4096 Feb  2  20014 efg
-rwxr-xr-x   4 root root    4096 Feb  2  20014 aaa.txt

Agora quero descobrir se os arquivos de saída listados são ou não diretório usando loop ou loop.

    
por Aravind 13.06.2014 / 21:51

3 respostas

2

Com ls , use o comando abaixo para listar apenas diretórios.

ls -d -- */

Para listar os arquivos regulares usando o próprio ls (e assumindo que os nomes dos arquivos não contenham caracteres de nova linha), você pode usar o comando abaixo.

ls -p | grep -v /

Para listar apenas os arquivos regulares, com o GNU e algumas outras implementações de localização, você pode usar

find . -maxdepth 1 -type f

(note que ao contrário do anterior, ele também inclui arquivos ocultos e a lista não está classificada)

O equivalente padrão seria:

find . ! -name . -prune -type f
    
por 13.06.2014 / 21:59
0

Você não precisaria de um loop para encontrar todos os diretórios, você pode usar o comando find :

find . -maxdepth 1 -type d

Isso listará todos os diretórios no diretório atual. Se você quiser a saída ls -l , você pode fazer:

find . -maxdepth 1 -type d | xargs ls -ld

Se você realmente quiser usar um loop, use a seguinte construção:

for file in $(ls)
do
  if [[ -d $file ]]
  then
    ls -ld $file
  fi
done

O loop for faz um loop sobre todas as entradas retornadas por ls , depois o if testa se a entrada é um diretório.

    
por 13.06.2014 / 21:59
0

Se você receber apenas a saída ls -ltr , continue lendo este post. Caso contrário, veja quais outros pôsteres, como Ramesh ou mtak , sugerido.

A primeira letra de cada linha em sua saída informa se é um diretório ou não.

Então, minha solução ingênua seria:

while read line; do
  [ "${line:0:1}" == "d" ] && echo "$line" | awk '{print $NF}' # it is a directory, echo the directory name
done < outputfilename
    
por 14.06.2014 / 02:56