Isso me dá uma lista de caminhos para todos os arquivos de texto:
find / -type f -name '*.txt' > ~/Desktop/sorted.txt
Gostaria de classificar esta lista de caminhos de acordo com o tamanho do arquivo de cada item, mas não tenho certeza do que usar. Isso não funciona como eu esperava:
find / -type f -name '*.txt' |sort -S > ~/Desktop/sorted.txt
Alguma sugestão?
Responder1
Este comando usa um wc
processo separado para cada arquivo correspondente, portanto seu desempenho pode ser ruim. Eu o criei tendo em mente a compatibilidade e a conformidade com POSIX.
find / -type f -name '*.txt' -exec wc -c {} \; | sort -t ' ' -n -k 1,1 | cut -d ' ' -f 2-
Cada um wc -c
gera uma linha em um formulário
12345 /path/to/file/possibly with spaces/foo.txt
onde o primeiro espaço separa a contagem de bytes do caminho. sort
obtém todas as linhas, usa o caractere de espaço como separador de campo e classifica numericamente de acordo com o primeiro campo, ou seja, de acordo com a contagem de bytes. Em seguida, cut
usa o caractere de espaço como delimitador de campo e imprime a partir do segundo campo, ou seja, tudo menos o primeiro campo, ou seja, tudo menos o byte conta, ou seja, os caminhos.
A solução pode ser facilmente adaptada para classificar por contagem de linhas: basta usar wc -l
em vez de wc -c
.
Nota:
Um caminho contendo um ou mais caracteres de nova linha quebrará meu código. Para tornar o código imune a isso, pode-se usar ferramentas que suportem caracteres nulos como delimitadores. Com as ferramentas POSIX isso é difícil, se é que é possível. Esta resposta concentra-se na portabilidade, portanto, esperamos que todos os caminhos para seus arquivos de texto sejam "agradáveis".
Responder2
Você sempre pode optar pela abordagem (provavelmente abaixo do ideal) de encadear ferramentas:
find / -type f -name '*.txt' -ls | sort -nk7,7 | awk '{print $NF;}'
- A
-ls
ativação do find mostrará uma série de colunas extras, incluindo o tamanho do arquivo (no conjunto de ferramentas GNU, a 7ª coluna pode ser diferente no MacOS) - O
sort
fará uma classificação numérica na 7ª coluna (tamanho do arquivo) - Remove
awk
todos os outros campos e imprime apenas o nome do arquivo