questo è un modo per farlo
pdftk $(ls | sort -n) cat output combinewd2.pdf
o utilizzando backtick
pdftk `ls | sort -n` cat output combinewd2.pdf
Come sottolineato nei commenti questo non funzionerà su nomi di file contenenti spazi. In questo caso è possibile utilizzare eval
eval pdftk $(while IFS= read -r file; do
echo \"$file\"
done < <(ls | sort -n)) cat output combinewd2.pdf
Supponiamo che ci siano due file denominati "0 pippo" e "1 bar" allora il risultato di eval sarebbe il comando desiderato, con i nomi dei file tra virgolette:
Se il nome file può contenere righe nuove, utilizzare il comando find
, vedere la discussione di @joeytwiddle nei commenti della risposta di @ andrewdotn. La seguente soluzione gestisce anche i nomi di file con doppi apici utilizzando il comando sed
per sfuggire le virgolette doppie:
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
Un 'risposta molto bash'-centrica, ma fresco comunque. Ciò non funzionerà in 'csh/tcsh', comunque. (tutti i commenti sulla scelta della shell> '/ dev/null') – radical7
In modo cruciale, ** questo non funzionerà su nomi di file contenenti spazi **. Le parole saranno suddivise in argomenti separati. – joeytwiddle
@joeytwiddle hai ragione, propongo una soluzione usando eval – amdn