Mostra a cauda dos arquivos em um diretório?

5

Eu tenho um diretório que é muito grande para navegar por qualquer meio. Grepping retorna listas de argumentos por muito tempo, o WINSCP trava ao tentar abrir o diretório.

Existe uma maneira de ver apenas os últimos 200 arquivos no diretório. Como 'seguindo' o diretório?

    
por blarg 28.11.2013 / 12:19

2 respostas

7

O bloqueio de seus arquivos não inclui caracteres estranhos em seus nomes, como espaços, novas linhas, etc. Um canal simples para tail -n 200 deve ser suficiente.

Exemplo

Dados da amostra.

$ touch $(seq 300)

Agora, os últimos 200:

$ ls -l | tail -n 200

Você pode não gostar da maneira como os resultados são apresentados nessa lista de 200. Para isso, você pode controlar a ordem dos resultados que ls produz por meio de vários comutadores. Por exemplo, os dados que geramos são numéricos. Usando o método acima, os resultados são mostrados assim:

$ ls -l | tail -n 12
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 89
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 9
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 90
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 91
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 92
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 93
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 94
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 95
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 96
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 97
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 98
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 99

Mas talvez você queira isso em ordem numérica real, para poder usar a opção -v :

$ ls -lv | tail -n 12
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 289
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 290
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 291
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 292
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 293
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 294
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 295
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 296
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 297
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 298
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 299
-rw-rw-r-- 1 saml saml 0 Nov 28 11:50 300

Você precisa prestar atenção especial a ls implementações, pois algumas podem incluir uma opção, enquanto outras não. Consulte as páginas de manual nos respectivos sistemas para obter a lista completa dos comutadores disponíveis.

    
por 28.11.2013 / 17:59
1

No zsh:

print -lr -- *([1,200])          # print the name of the first 200 files in alphabetical order
print -lr -- *(om[1,200])        # print the name of the 200 most recent files
print -lr -- *(oN[1,200])        # print the name of 200 files

A variante oN lê os arquivos na ordem dos diretórios, para que não perca tempo classificando-os.

Se você quiser espiar o conteúdo do arquivo também:

tail *(oN[1,200])

Com qualquer shell, para imprimir os nomes de 200 arquivos sem ler todos os nomes de arquivos e classificá-los:

ls -lU | head -n 200

Para imprimir os nomes dos 200 arquivos mais recentes:

ls -lt | head -n 200

Se você quiser mover os arquivos para vários diretórios, consulte Batch copy to vários diretórios , Como posso encontrar arquivos e usar o xargs para movê-los? , Cópia em lote / mover arquivos em unix? , Arquivo de lote movido para estrutura de diretórios com base no nome de arquivo

    
por 29.11.2013 / 01:36