私は (Bash に関する知識がほとんどなく、検索エンジンを多用して) 大きな PDF ファイルのページを並べ替える Bash スクリプトを作成しました。
#!/bin/bash
file=originalfile.pdf;
newfile=$(basename $file .pdf)-2.pdf;
tmpfile=$(mktemp --suffix=.pdf);
blankfile=$(mktemp --suffix=.pdf);
cp -f $file $newfile;
cp -f $file $tmpfile;
numberofpages=`pdftk $file dump_data | grep "NumberOfPages" | sed 's:.*\([0-9][0-9*]\).*:\1:'`;
echo "" | ps2pdf -sPAPERSIZE=a4 - $blankfile;
while (( $numberofpages % 4 != 0 ));
do
((numberofpages++));
pdftk A=$newfile B=$blankfile cat A B output $tmpfile;
cp -f $tmpfile $newfile;
done;
neworder=`
for (( a=1, b=3, c=4, d=2 ;
a <=numberofpages ;
((a+=4)), ((b+=4)), ((c+=4)), ((d+=4))
));
do
echo -n "$a $b $c $d ";
done`;
pdftk $tmpfile cat $neworder output $newfile;
通常のユーザーが「インストール」して使用できるように、それから Nautilus-Actions スクリプトを作成したかったのです。通常のユーザーとは、コマンドラインを入力できず、いくつかの手順に従って指定した場所にスクリプトをコピーできない人を意味します。
残念ながら、スクリプトは機能しませんでした。以下にコメントしている人々の助けのおかげで、この新しいスクリプトを思いつきました。
#!/bin/bash
file=originalfile.pdf;
newfile=$(basename $file .pdf)-2.pdf;
tmpfile=$(mktemp --suffix=.pdf);
blankfile=$(mktemp --suffix=.pdf);
cp -f $file $newfile;
cp -f $file $tmpfile;
numberofpages=`pdftk $file dump_data | grep "NumberOfPages" | sed 's:.*\([0-9][0-9*]\).*:\1:'`;
echo "" | ps2pdf -sPAPERSIZE=a4 - $blankfile;
while (( $numberofpages % 4 != 0 )); # NOTE: replace % by %% in Nautilus-Actions
do
((numberofpages++));
pdftk A=$newfile B=$blankfile cat A B output $tmpfile;
cp -f $tmpfile $newfile;
done;
a=0;
neworder=$(
while [ $a -lt $numberofpages ];
do
echo -n "$(($a + 1)) $(($a + 3)) $(($a + 4)) $(($a + 2)) ";
((a+=4));
done;
);
pdftk $tmpfile cat $neworder output $newfile;
Path
Nautilus-Actionsのエントリにすべてを貼り付けたところ、最終的に機能しました。新しく作成された Nautilus アクションは、.desktop
ファイルにエクスポートできます (したがって、どのユーザーでも簡単にインポートできます)。
出力を表示するよう Nautilus-Actions に依頼すると、Nautilus-Actions はコマンド内でコマンド ラインを実行するよう/bin/sh -c 'myscript...'
です。
なぜこれを機能させるために多くのことを変更しなければならなかったのか説明していただけますか? 特に、なぜ を に変更しなければならなかっfor
たのwhile
ですか?
注:混乱していたので、質問を完全に修正しました。