Liste filer numerisk i Bash: Sådan gør du det korrekt!

Hvordan kan disse filer i en mappe listes i Bash i stigende numerisk rækkefølge baseret på taldelen af filnavnet, så rækkefølgen bliver cwcch1.pdf, cwcch2.pdf, ..., cwcch9.pdf, cwcch10.pdf osv.? Målet er at sammenkæde PDF-filerne med pdftk ved hjælp af en kommando som pdftk `ls *.pdf | sort -n` cat output output.pdf, men den nuværende sortering er forkert.

For at liste filer i en mappe i stigende numerisk rækkefølge baseret på taldelen af filnavnet, kan du bruge kommandoen: `ls | grep -Eo 'cwcch[0-9]+' | sort -t 'h' -k 2n | sed 's/$/.pdf/'`.

Hvordan kan disse filer i en mappe listes i Bash i stigende numerisk rækkefølge baseret på taldelen af filnavnet?

For at liste filer i en mappe i stigende numerisk rækkefølge baseret på taldelen af filnavnet, kan du bruge følgende Bash-kommando:

ls | grep -Eo 'cwcch[0-9]+' | sort -t 'h' -k 2n | sed 's/$/.pdf/'

Her er en trinvis forklaring af kommandoen:

  • ls: Lister alle filer i den aktuelle mappe.
  • grep -Eo 'cwcch[0-9]+': Filtrerer filerne og udtrækker kun de dele af filnavnene, der matcher mønsteret 'cwcch' efterfulgt af et eller flere cifre.
  • sort -t 'h' -k 2n: Sorterer de udtrukne filnavne numerisk baseret på taldelen efter 'h'.
  • sed 's/$/.pdf/': Tilføjer '.pdf' til slutningen af hver linje for at gendanne de oprindelige filnavne.

For at sammenkæde PDF-filerne med pdftk i den korrekte rækkefølge, kan du bruge følgende kommando:

pdftk $(ls | grep -Eo 'cwcch[0-9]+' | sort -t 'h' -k 2n | sed 's/$/.pdf/') cat output output.pdf

Dette vil sikre, at PDF-filerne bliver sammenkædet i den ønskede numeriske rækkefølge.