Dies ist eine Möglichkeit, es
pdftk $(ls | sort -n) cat output combinewd2.pdf
oder mit Graviszeichen
pdftk `ls | sort -n` cat output combinewd2.pdf
Wie dies zu tun, wird nicht funktionieren mit Leerzeichen auf Dateinamen in den Kommentaren darauf hingewiesen. In diesem Fall könnten Sie eval
eval pdftk $(while IFS= read -r file; do
echo \"$file\"
done < <(ls | sort -n)) cat output combinewd2.pdf
Angenommen, es den Namen „0 foo“ und „1 bar“ sind zwei Dateien zu verwenden, dann wäre das Ergebnis von eval der gewünschten Befehl sein, mit den Dateinamen in doppelten Anführungszeichen:
pdftk " 0 foo " " 1 bar " cat output combinewd2.pdf
Wenn die Dateinamen möglicherweise Zeilenumbrüche enthalten, verwenden Sie den Befehl find
, siehe die Diskussion von @joeytwiddle in den Kommentaren von @ andrewdotns Antwort. Die folgende Lösung ist auch für Dateinamen mit doppelten Anführungszeichen des sed
Befehl doppelte Anführungszeichen zu entkommen:
eval pdftk $(while IFS= read -r -d '' file; do
echo \"$file\"
done < <(find . -maxdepth 1 -type f -print0 | \
sed 's/"/\\"/g'| sort -zn)) cat output combinewd2.pdf
Eine sehr 'bash' zentrierte Antwort, aber kühl dennoch. Dies funktioniert jedoch nicht in 'csh/tcsh'. (alle Kommentare zur Shell-Auswahl> '/ dev/null') – radical7
Entscheidend ist, ** dies funktioniert nicht bei Dateinamen mit Leerzeichen **. Die Wörter werden in separate Argumente aufgeteilt. – joeytwiddle
@joeytwiddle Sie sind richtig, ich schlage eine Lösung mit eval – amdn