Saya ingin menggabungkan file pdf dengan pdfjoin
/pdfunite
/… dalam urutan numerik dibahas dengan baik di utas answer perintah linux menggabungkan file pdf dengan pengurutan numerik dan Dimodifikasi urutan waktu.
Jika Anda menggunakan solusi di utas, itu menempatkan urutan dalam urutan numerik dan urutan abjad.
Ini bermasalah dengan nama file seperti di mana Anda melihat keduanya memiliki waktu yang sama Dimodifikasi oleh akurasi menit tetapi Visceral
lebih awal dengan akurasi kedua (Browser file mencatatnya dan menempatkan Visceral
pertama di Modified
pesan.
Filename Modified
----- ---
3.THE ABC.pdf 10:39
3.Visceral abc..pdf 10:39
Nama file lengkap
1.Description abc.pdf
2.Gabcd.pdf
3.THE ABC.pdf
3.Visceral abc..pdf
4.description of abc.pdf
5.Chraa..pdf
Proposal #1 bekerja dalam urutan numerik dan abjad tetapi tidak dalam urutan numerik dan dimodifikasi
# https://stackoverflow.com/a/23643544/54964
ls -v *.pdf | ...
bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" output.pdf'
Proposal #2 kasus yang disederhanakan tetapi tidak menangani spasi putih dan karakter khusus lainnya dalam nama file
# https://stackoverflow.com/a/23643544/54964
pdfunite $(ls *.pdf | sort -n) output.pdf
Tidak ada apa pun di pdfunite --help
tentang pemesanan jadi saya pikir itu harus dilakukan oleh ls
/sort
/…
Perintah sort
tidak memiliki apa-apa tentang modified
di halaman manualnya.
Menguji jawaban xhienne
Urutan tidak benar pada output di mana Anda melihat 2.jpg
dan 4.jpg
berada di urutan yang salah untuk beberapa alasan
[email protected]:~/Documents$ ls -tr /home/masi/Documents/[0-9]* | sort -t. -k1,1n -s
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/1.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/3.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/5.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/6.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/7.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/8.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/9.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/10.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/2.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/4.jpg
iterasi ke-2
export LC_ALL=C; ls -tr /home/masi/Documents/[0-9]* | sort -t. -k1,1n -s
Keluaran
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/1.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/3.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/5.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/6.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/7.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/8.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/9.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/10.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/2.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/4.jpg
OS:Debian 8.5
Jawaban yang Diterima:
Anda bisa melakukannya dengan zsh
:
zmodload zsh/stat
prefixmtime () {
sortstring=${(l:6::0:)${REPLY%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
REPLY=${sortstring}
}
print -rl -- *(o+prefixmtime)
Ganti print -rl
dengan perintah Anda jika Anda senang dengan hasilnya
Cara kerjanya:
Gumpalan akan diurutkan di sini (melalui o+function
) berdasarkan apa fungsinya prefixmtime
kembali, yaitu sortstring
yang merupakan string yang diperoleh dengan menggabungkan awalan numerik dari setiap nama file ${REPLY%%.*}
diisi kiri dengan nol (l:6::0:)
(dengan asumsi awalan memiliki panjang hingga 6 karakter) dan mtime
dalam hitungan detik (diperoleh melalui zstat
modul). Mungkin lebih mudah untuk memahami cara kerjanya jika Anda menjalankan:
{ for f (*)
printf '%s %s\n' ${(l:6::0:)${f%%.*}}$(zstat -F '%s' +mtime -- $f) $f
} | sort -k1,1n
Perhatikan bahwa hal di atas mengasumsikan Anda berada di direktori yang sama dengan file Anda, jika tidak, Anda harus menentukan string pengurutan dalam fungsi itu sebagai
sortstring=${(l:6::0:)${${REPLY##*/}%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
dan kemudian Anda dapat menggunakan jalur direktori mis.
print -rl some/place/else/*(o+prefixmtime)