procura encontrar por ordem alfabética

0

Atualmente, estou usando um comando short find para pesquisar vários diretórios (e subdiretórios) para arquivos que terminam em "tex" e, em seguida, os colocam em um texto coerente. O comando que eu uso é este:

find . -name '*.tex' -exec cat {} \; > blub.txt

No entanto, o comando find não pesquisa as pastas da maneira que eu gostaria que elas fizessem. Ele pula muito e em vez de primeiro pegar a pasta "2011" começa com "2013" etc. Existe uma maneira de alterar isso, de modo que comece com 2011, e os subdiretórios nele, ou seja, com a pasta "01 -janeiro ", depois" 02-february "etc.

    
por miri queer 17.09.2018 / 22:45

2 respostas

1

Algo parecido com isso pode funcionar:

find -type f -name \*.tex -print0 | sort -z | xargs -0 cat >> blub.txt

A opção print0 para find usa um caractere NUL para delimitar objetos encontrados, que podem ser aproveitados com sort -z para colocá-los em ordem lexical; Em seguida, alimentamos essa lista ordenada em xargs .

    
por 17.09.2018 / 22:54
1

Se você não tem muitos diretórios totais, você pode forçar o find a percorrer os caminhos na ordem, dando a todos eles na linha de comando:

shopt -s globstar
find **/ -name '*.tex' -exec cat {} \; > blub.txt

(Usando a sintaxe bash para habilitar o ** glob recursivo). A glob expande-se em ordem naturalmente ordenada, de modo que os anos seriam classificados primeiro, depois cada um dos meses numericamente pré-fixados se classificaria dentro de cada ano. A barra final pede ao bash para retornar apenas diretórios, deixando find localizar os arquivos.

Como alternativa, se você tiver uma lista de anos como subdiretórios, poderá passar por cima disso:

for year in *
do
  find "$year"/* -name '*.tex' -exec cat {} \;
done > blub.txt

Isso expande os 12 meses de cada ano em cada loop, forçando novamente find a processá-los na ordem.

    
por 17.09.2018 / 23:02