Se eu tiver esses arquivos em um diretório
cwcch10.pdf
cwcch11.pdf
cwcch12.pdf
cwcch13.pdf
cwcch14.pdf
cwcch15.pdf
cwcch16.pdf
cwcch17.pdf
cwcch18.pdf
cwcch1.pdf
cwcch2.pdf
cwcch3.pdf
cwcch4.pdf
cwcch5.pdf
cwcch6.pdf
cwcch7.pdf
cwcch8.pdf
cwcch9.pdf
como posso listá-los no Bash para que eles estejam em ordem numérica crescente com base na parte numérica da string. Portanto, a ordem resultante é cwcch1.pdf, cwcch2.pdf, ..., cwcch9.pdf, cwcch10.pdf
etc.
No final, estou tentando concatenar os PDFs pdftk
com algo como o seguinte
pdftk `ls *.pdf | sort -n` cat output output.pdf
mas isso não funciona, pois minha classificação está errada.
Respostas:
Algo assim pode fazer o que você deseja, embora seja necessário uma abordagem um pouco diferente:
fonte
Você
sort
pode ter a capacidade de fazer isso por você:fonte
-V, --version-sort natural sort of (version) numbers within text
Para este exemplo em particular, você também pode fazer isso:
Ou seja, classifique numericamente (-n) no segundo campo (-k2) usando 'h' como o separador de campos (-th).
fonte
Você pode usar a
-v
opção no GNUls
: tipo natural de (versão) números dentro do texto.Isso não funciona com o BSD
ls
(por exemplo, no OS X), onde a-v
opção tem um significado diferente.fonte
Use a expansão do shell diretamente em uma linha de comando. A expansão deve ordená-los corretamente. Se eu entendo
pdftk
a sintaxe da linha de comando corretamente, isso fará o que você deseja:Ou você pode tentar uma abordagem diferente. Quando preciso fazer algo assim, geralmente tento meus números formatados corretamente com antecedência. Se eu chegar atrasado e os PDFs já estiverem numerados como o seu exemplo, usarei isso para renumerar:
Agora a
ls
classificação padrão funcionará corretamente.fonte
pdftk cwcch{{1..9},{10..18}}.pdf ...
bash
extensão?Aqui está um método apenas usando sort:
fonte
Classificar -g é usado para classificar números em ordem crescente.
O liner a seguir itera sobre um arquivo com os nomes dos arquivos PDF e captura os números apenas com egrep -o e usa sort -g para classificar os números em ordem crescente . Em seguida, ele alimenta esses números para sed e os conecta. Em seguida, libera a saída de duplicatas com uniq.
No lugar do uniq, você também pode usar o awk:
O acima é equivalente a uniq.
O que você está procurando é este liner:
Conteúdo do tmp:
EDITAR:
Saída do comando:
fonte
tmp
arquivo? Alguma saída para colar na resposta?