我(通过我对Bash的一点知识和对搜索引擎的广泛使用)制作了一个Bash脚本来重新排序大型PDF文件的页面:
#!/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脚本,以便它可以安装&#34;并由普通用户使用。对于普通用户,我的意思是有人无法键入任何命令行,无法按照几个步骤在指定位置复制脚本。
不幸的是,脚本没有用,我想出了这个新脚本,感谢下面评论的人的帮助:
#!/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;
我确实将所有内容都粘贴在Nautilus-Actions的Path
条目中,并且最终有效。然后可以将新创建的Nautilus操作导出到.desktop
文件中(因此很容易被任何用户导入):
如果我要求Nautilus-Actions显示输出,Nautilus-Actions似乎在/bin/sh -c 'myscript...'
命令中执行命令行。
你能解释一下为什么我要改变这么多东西才能使它发挥作用吗?特别是为什么我必须将for
更改为while
?
注意:我完全改变了这个问题,因为它很乱。