Files
如何按數字順序和修改的時間順序對文件名進行排序?
我想加入 pdf 文件 by
pdfjoin
/pdfunite
/… 以線上程答案linux 命令中討論的數字順序合併 pdf 文件與數字排序和修改的時間順序。如果您線上程中使用解決方案,它將按數字順序和字母順序排列順序。這對於文件名是有問題的,例如您看到兩者俱有相同的按分鐘精度修改的時間,但Visceral
按秒精度更早(文件瀏覽器注意到它並按順序排Visceral
在第一位Modified
。Filename Modified ----- --- 3.THE ABC.pdf 10:39 3.Visceral abc..pdf 10:39
完整的文件名
1.Description abc.pdf 2.Gabcd.pdf 3.THE ABC.pdf 3.Visceral abc..pdf 4.description of abc.pdf 5.Chraa..pdf
提案 #1 按數字和字母順序工作,但不按數字和修改順序
# https://stackoverflow.com/a/23643544/54964 ls -v *.pdf | ... bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" output.pdf'
提案 #2 簡化了大小寫,但不處理文件名中的空格和其他特殊字元
# https://stackoverflow.com/a/23643544/54964 pdfunite $(ls *.pdf | sort -n) output.pdf
關於排序沒有任何
pdfunite --help
內容,所以我認為應該由ls
/sort
/… 完成該命令的手冊頁sort
中沒有任何內容modified
。測試 xhienne 的答案
您看到的輸出中的順序不正確,
2.jpg
並且4.jpg
由於某種原因處於錯誤的順序masi@masi:~/Documents$ ls -tr /home/masi/Documents/[0-9]* | sort -t. -k1,1n -s /home/masi/Documents/1.jpg /home/masi/Documents/3.jpg /home/masi/Documents/5.jpg /home/masi/Documents/6.jpg /home/masi/Documents/7.jpg /home/masi/Documents/8.jpg /home/masi/Documents/9.jpg /home/masi/Documents/10.jpg /home/masi/Documents/2.jpg /home/masi/Documents/4.jpg
第二次迭代
export LC_ALL=C; ls -tr /home/masi/Documents/[0-9]* | sort -t. -k1,1n -s
輸出
/home/masi/Documents/1.jpg /home/masi/Documents/3.jpg /home/masi/Documents/5.jpg /home/masi/Documents/6.jpg /home/masi/Documents/7.jpg /home/masi/Documents/8.jpg /home/masi/Documents/9.jpg /home/masi/Documents/10.jpg /home/masi/Documents/2.jpg /home/masi/Documents/4.jpg
作業系統:Debian 8.5
你可以這樣做
zsh
:zmodload zsh/stat prefixmtime () { sortstring=${(l:6::0:)${REPLY%%.*}}$(zstat -F '%s' +mtime -- $REPLY) REPLY=${sortstring} } print -rl -- *(o+prefixmtime)
print -rl
如果您對結果滿意,請替換為您的命令工作原理: glob 將根據函式返回的內容在
此處排序(通過),即通過連接每個文件名的數字前綴獲得的字元串,左填充零(假設前綴最長為 6 個字元) )和以秒為單位的(通過模組獲得)。如果你執行它可能更容易理解它是如何工作的:
o+function
prefixmtime``sortstring``${REPLY%%.*}``(l:6::0:)``mtime
zstat
{ for f (*) printf '%s %s\n' ${(l:6::0:)${f%%.*}}$(zstat -F '%s' +mtime -- $f) $f } | sort -k1,1n
請注意,以上假設您與文件位於同一目錄中,否則您必須在該函式中定義排序字元串為
sortstring=${(l:6::0:)${${REPLY##*/}%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
然後你可以使用目錄路徑,例如
print -rl some/place/else/*(o+prefixmtime)