Si j'ai ces fichiers dans un répertoire
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
comment puis-je les lister dans Bash afin qu'ils soient dans l'ordre numérique croissant basé sur la partie numérique de la chaîne. Donc, l'ordre résultant est cwcch1.pdf, cwcch2.pdf, ..., cwcch9.pdf, cwcch10.pdf
, etc.
Ce que j’essaie de faire, c’est concaténer les fichiers PDF pdftk
avec quelque chose comme ce qui suit:
pdftk `ls *.pdf | sort -n` cat output output.pdf
mais cela ne fonctionne pas car mon tri est faux.
Réponses:
Quelque chose comme cela pourrait faire ce que vous voulez, bien que l'approche soit légèrement différente:
la source
Vous
sort
pouvez avoir la capacité de le faire pour vous:la source
-V, --version-sort natural sort of (version) numbers within text
Pour cet exemple particulier, vous pouvez également le faire:
En d’autres termes, triez numériquement (-n) sur le deuxième champ (-k2) en utilisant «h» comme séparateur de champ (-th).
la source
Vous pouvez utiliser l'
-v
option dans GNUls
: sorte naturelle de nombres (version) dans le texte.Cela ne fonctionne pas avec BSD
ls
(par exemple sous OS X), où l'-v
option a une signification différente.la source
Utilisez l'expansion du shell directement dans une ligne de commande. L'expansion devrait les commander correctement. Si je comprends
pdftk
bien la syntaxe de ligne de commande, cela fera ce que vous voulez:Ou vous pouvez essayer une approche différente. Lorsque j'ai besoin de faire quelque chose comme ça, j'essaie généralement de mettre mes chiffres en forme correctement à l'avance. Si j'arrive tard et que les fichiers PDF sont déjà numérotés comme dans votre exemple, je vais utiliser ceci pour renuméroter:
Maintenant, le
ls
tri standard fonctionnera correctement.la source
pdftk cwcch{{1..9},{10..18}}.pdf ...
bash
extension?Voici une méthode utilisant simplement le tri:
la source
Sort -g est utilisé pour trier les nombres par ordre croissant.
Le liner suivant parcourt un fichier avec les noms des fichiers PDF et saisit les nombres uniquement avec egrep -o et utilise sort -g pour trier les nombres par ordre croissant . Ensuite, il envoie ces nombres à sed et les branche. Puis supprime la sortie des doublons avec uniq.
Au lieu de uniq, vous pouvez également utiliser awk:
Ce qui précède est équivalent à uniq.
Ce que vous cherchez, c'est ce liner:
Contenu de tmp:
MODIFIER:
Sortie de commande:
la source
tmp
fichier? Une sortie à coller dans la réponse?