pdfjoin
/ / ...を介してpdfunite
スレッドへの回答で説明されているように、PDFファイルを数値順に結合したいと思います。PDFファイルをマージして数値でソートするLinuxコマンドそして修正済み年代順に。スレッドでソリューションを使用している場合は、数字とアルファベット順に並べ替えられます。これはファイル名に問題があります。たとえば、両方とも同じ修正時間分精度で表示されますが、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
2回目の繰り返し
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
答え1
あなたはこれを行うことができますzsh
:
zmodload zsh/stat
prefixmtime () {
sortstring=${(l:6::0:)${REPLY%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
REPLY=${sortstring}
}
print -rl -- *(o+prefixmtime)
print -rl
結果に満足したら、コマンドに置き換えてください。
仕組み:
globはここでソートされています(以下を介して)。o+function
prefixmtime
)関数が返す内容に応じて、sortstring
左側の各ファイル名の数値プレフィックスを連結して得られた文字列です。${REPLY%%.*}
パディング処理0を含む(l:6::0:)
(プレフィックス長が最大6文字であると仮定)そして秒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)
答え2
find /home/masi/Documents -maxdepth 1 -type f -name '[0-9]*' -printf "%T+ %f\n" | sort -k2n -k1,1| cut -d ' ' -f 2- | xargs -i echo pdfunite /home/masi/Documents/{} output.pdf
ファイル名の新しい行は処理されません。
-k1,1
これを変更して、逆順ソート順を切り替えることができます-k1,1r
。これにより、時間の並べ替えが逆の順に行われ、-k2nr
ファイル名の並べ替えが逆の順に行われます。
答え3
解決策は最初に修正時間に基づいてソートし、最初の数値フィールド(フィールドが「.」で区切られていると仮定)のみをソートし、最後の比較方法(別名)。安定したソート)。
ls -tr [0-9]* | sort -t. -k1,1n -s
【書き直す】
ファイル名にスペースがあるように見えるので、次のようにxargs
実行する必要がありますpdfunite
。
ls -tr [0-9]* | ( sort -t. -k1,1n -s; echo output.pdf ) | xargs pdfunite