Listar diretórios e entender ls

1

Na página man ls , vi isto

 -d, --directory

    list directory entries instead of contents, and do not 
    dereference symbolic links

na minha pasta atual:

drwxr-xr-x 2 oracle oinstall 4.0K Jul 13 11:52 folderd
drwxr-xr-x 2 oracle oinstall 4.0K Jul 13 11:52 folderc
drwxr-xr-x 2 oracle oinstall 4.0K Jul 13 11:52 folderb
drwxr-xr-x 2 oracle oinstall 4.0K Jul 13 11:52 foldera
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 filed
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 filec
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 fileb
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 filea

q1) Fazendo um ls -ld me mostra um . - por que?

[oracle@centos1 script]$ ls -ld
drwxr-xr-x 6 oracle oinstall 4096 Jul 13 11:52 .

fazendo um ls -l * , me dê tudo, incluindo os arquivos da pasta:

[oracle@centos1 script]$ ls -l *
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 filea
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 fileb
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 filec
-rw-r--r-- 1 oracle oinstall    0 Jul 13 11:52 filed

foldera:
total 0
-rw-r--r-- 1 oracle oinstall 0 Jul 13 11:57 fileafolda
-rw-r--r-- 1 oracle oinstall 0 Jul 13 11:55 fileainfolda

folderb:
total 0

folderc:
total 0

folderd:
total 0

Fazendo um ls -ld */ e mostra o resultado certo, apenas pastas.

[oracle@centos1 script]$ ls -ld */
drwxr-xr-x 2 oracle oinstall 4096 Jul 13 11:57 foldera/
drwxr-xr-x 2 oracle oinstall 4096 Jul 13 11:52 folderb/
drwxr-xr-x 2 oracle oinstall 4096 Jul 13 11:52 folderc/
drwxr-xr-x 2 oracle oinstall 4096 Jul 13 11:52 folderd/

q3) o que o ls realmente aceita como parâmetro? * aqui significa tudo, incluindo pasta. e */ significa apenas pasta, e -d aqui remove o conteúdo da pasta.

Se for esse o caso, por que o ls -ld não mostra nenhum resultado? apenas um . em q1?

Em resumo, isso significa que:

  1. ls -l = ls -l . = lista todo o conteúdo no diretório atual
  2. ls -l * = lista todo o conteúdo no diretório atual + o conteúdo nos subdiretórios
  3. ls -ld = ls -ld . = lista o diretório atual mas não seu conteúdo (daí o.)
  4. ls -l */ = lista todos os subdiretórios + seu conteúdo neste diretório atual
  5. ls -ld */ = lista todos os subdiretórios, mas não seu conteúdo neste diretório atual

q1) Mas eu não entendo o seguinte abaixo

Supondo que eu esteja dentro de /script .

ls -l * → lista todo o conteúdo dentro do diretório atual, incluindo o conteúdo dos subdiretórios.

ls -ld * → lista todo o conteúdo dentro do diretório atual, exceto o conteúdo dos subdiretórios.

Aqui, o -d está entrando em vigor nos subdiretórios dentro do diretório atual.

Mas ls -ld . → o "-d" não deve ser usado para os subdiretórios, mas, na verdade, para o próprio diretório atual.

Eu não entendo porque o -d está afetando o diretório atual e não seu conteúdo.

    
por Noob 13.07.2015 / 06:02

1 resposta

3

q1) Doing a ls -ld show me a . - why ?

Quando você não fornece argumentos para ls , o padrão é executar o comando no diretório atual, também conhecido como . . Normalmente, isso significa listar o conteúdo do diretório, mas você usou a opção -d que solicita listar o diretório em si , não seu conteúdo. Então você obtém as informações de . , o diretório atual.

doing a ls -ld *, give me everything including the files in the folder

Não, isso não acontece. ls -ld * listará cada arquivo no diretório atual correspondente a * (que é todos eles excetam os ocultos), mas não o conteúdo daqueles que são diretórios, mais uma vez porque você usou -d . Observe que o resultado de seu exemplo faz algo diferente porque não usa -d .

doing a ls -ld */ and it shows me the right result, only folders.

Apenas os diretórios correspondem ao padrão */ , porque os arquivos comuns não podem ter nomes de caminho que terminem em / .

q3) what does "ls" actually take in as a parameter ? * here means everything including folder. and */ means folder only, and -d here remove folder content.

Tudo basicamente correto. Para expandir: * corresponde a tudo, exceto arquivos ocultos, */ é o mesmo, mas apenas corresponde a diretórios, e você tem o significado da opção -d .

if that's the case, why doesn't ls -ld show any result at all. only a . at q1

Ele mostra um resultado: mostra o diretório atual, que é conhecido como . !

    
por 13.07.2015 / 06:19