Estamos começando uma aula de UNIX e aprendendo vários comandos Bash. Nossa atribuição envolve a execução de vários comandos em um diretório que também possui várias pastas.
Eu sei como listar e contar todos os arquivos regulares da pasta raiz usando:
find . -type l | wc -l
Mas gostaria de saber aonde ir a partir daí para encontrar o maior arquivo em todo o diretório. Já vi du
algumas coisas a respeito de um comando, mas não aprendemos isso, então, no repertório de coisas que aprendemos, presumo que precisamos conectá-lo de alguma forma ao ls -t
comando.
E me perdoe se meu 'jargão' não estiver correto, ainda estou me acostumando!
man
seguido do comando no qual está interessado. O Up irá exibir uma boa entrada manual para esse comando (pressioneq
para voltar à linha de comando).Respostas:
Citação deste link-
fonte
'%s %p\n'
com'%p\n'
e adicionando|xargs ls -lh
ao fimdu -am . | sort -nr | grep '\..*\.' | head
. Om
é para exibir o tamanho do arquivo em megabytes e usadogrep
para mostrar linhas com pelo menos dois pontos, o primeiro está no./
no caminho, o segundo está na extensão do arquivo, por exemplo.mov
.Para encontrar os 25 principais arquivos no diretório atual e seus subdiretórios:
find . -type f -exec ls -al {} \; | sort -nr -k5 | head -n 25
Isso produzirá os 25 principais arquivos classificando com base no tamanho dos arquivos por meio do comando piped "sort -nr -k5".
O mesmo, mas com tamanhos de arquivo legíveis por humanos:
find . -type f -exec ls -alh {} \; | sort -hr -k5 | head -n 25
fonte
saídas
Se você quiser apenas o nome do arquivo:
Isso evita usar
awk
e permite que você use quaisquer sinalizadores que desejarls
.Advertência . Porque
xargs
tenta evitar a construção de linhas de comando muito longas, isso pode falhar se você executá-lo em um diretório com muitos arquivos porquels
acaba sendo executado mais de uma vez. Não é um problema intransponível (você pode coletar ahead -n 1
saída de cadals
invocação e executarls -S
novamente, repetindo até que você tenha um único arquivo), mas prejudica um pouco essa abordagem.fonte
xargs
, eu negligenciei você +1find . -type f -print0 | xargs -0 ls -lS | head -n 1
xargs
executado. Para corrigi-lo adicionar classificação:find . -type f -print0 | xargs -0 ls -lS | sort -rk 5 | head -n 10
. Trabalhou no OSX para mim.Não existe um comando simples disponível para descobrir os maiores arquivos / diretórios em um sistema de arquivos Linux / UNIX / BSD. No entanto, a combinação dos três comandos a seguir (usando tubos), você pode facilmente encontrar a lista dos maiores arquivos:
Se você quiser uma saída mais legível por humanos, tente:
Onde,
fonte
Isso lista os arquivos recursivamente se forem arquivos normais, classifica pelo 7º campo (que é o tamanho na minha
find
saída; verifique o seu) e mostra apenas o primeiro arquivo.A primeira opção
find
é o caminho inicial para a pesquisa recursiva. Um tipo def
pesquisa de arquivos normais. Observe que se você tentar analisar isso como um nome de arquivo, poderá falhar se o nome do arquivo contiver espaços, novas linhas ou outros caracteres especiais. As opçõessort
também variam de acordo com o sistema operacional. Estou usando o FreeBSD.Uma solução "melhor", mas mais complexa e mais pesada, seria
find
atravessar os diretórios, mas talvez usarstat
para obter os detalhes sobre o arquivo e, em seguida, usarawk
para encontrar o tamanho maior. Observe que a saída destat
também depende do seu sistema operacional.fonte
+7
argumento deve estar fazendo? No meu tipo de máquina apenas reclama que não consegue encontrar um arquivo chamado+7
.sort
do seu sistema. Estou usando o OS X 10.4 no momento, em que o uso deriva da classificação do FreeBSD :sort [-cmus] [-t separator] [-o output-file] [-T tempdir] [-bdfiMnr] [+POS1 [-POS2]] [-k POS1[,POS2]] [file...]
... Observe o+POS [-POS2]
. Isso também funciona nas versões atuais do FreeBSD.-k
arg eg.sort -k 7
. editar: no OSX 10.5, a página do manual para classificar parece ter mudado para a versão que eu tenho.[+POS1] [-POS2]
notação é apenas mais antiga. Pelo que eu posso dizer, essa notação ainda é suportada pelo GNU sort moderno, embora agora que eu olhe, ela parece ter sido retirada da página de manual do sort após a versão 5.1. Você pode ver isso na página de manual do sort for FreeBSD 4.11 . Acho que não li a página de manual do sort antes do lançamento do FreeBSD 5.0!+POS1
contagens classificam os parâmetros de zero, enquanto as-k POS1
contagens de um.Isso encontrará o maior arquivo ou pasta em seu diretório de trabalho atual:
Para encontrar o maior arquivo em todos os subdiretórios:
fonte
ls
. Em meus testes, o-S
sinalizador listará um arquivo por linha. Eu corrigi o segundo comando. Espero que agora esteja totalmente à prova. Obrigado.No Solaris eu uso:
ou
porque nada mais postado aqui não funcionou. Isso encontrará o maior arquivo em
$PWD
subdiretórios e.fonte
Tente o seguinte one-liner (exiba os 20 maiores arquivos):
ou (tamanhos legíveis):
Portanto, esses aliases são úteis em seus arquivos rc :
fonte
Tente o seguinte comando:
Isso imprimirá o maior nome e tamanho de arquivo e mais de 500M. Você pode mover o
if($1 > 500000)
e imprimirá o maior arquivo do diretório.fonte
du -aS /PATH/TO/folder | sort -rn | head -2 | tail -1
ou
du -aS /PATH/TO/folder | sort -rn | awk 'NR==2'
fonte
Este script simplifica a localização de arquivos maiores para ações futuras. Eu o mantenho em meu diretório ~ / bin e coloco ~ / bin em meu $ PATH.
fonte
Essa é uma maneira bem mais simples de fazer isso:
E você vai conseguir:
8445 examples.desktop
fonte
1***
suposto fazer no final? Recebo um erro "nenhuma correspondência encontrada" para esse argumento.Solução Linux: Por exemplo, você deseja ver todos os arquivos / lista de pastas do seu diretório inicial (/) de acordo com o tamanho do arquivo / pasta ( ordem decrescente ).
sudo du -xm / | sort -rn | Mais
fonte
Para listar o arquivo maior em uma pasta
A saída
ls -sh
é uma visão dimensionadas
eh
compreensível do número do tamanho do arquivo.Você poderia usar
ls -shS /pathFolder | head -n 1
. Quanto maiorS
a partirls
já ordenar a lista dos arquivos maiores para os menores, mas o primeiro resultado a soma de todos os arquivos nessa pasta. Então, se você quiser apenas listar o arquivo maior, um arquivo, você precisahead -n 2
e verificar no "resultado da segunda linha" ou usar o primeiro exemplo comls sort head
.fonte
fonte