1

我制作了一个 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 脚本,以便普通用户可以“安装”和使用它。对于普通用户,我的意思是无法键入任何命令行并且无法按照几个步骤将脚本复制到指定位置的人。

不幸的是,该脚本不起作用,感谢下面评论的人们的帮助,我想出了这个新脚本:

#!/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;

我确实将所有内容都粘贴到了PathNautilus-Actions 的条目中,它终于奏效了。然后可以将新创建​​的 Nautilus-action 导出到一个.desktop文件中(因此任何用户都可以很容易地导入):

Nautilus-Actions 截图

如果我让 Nautilus-Actions 显示输出,似乎 Nautilus-Actions 在命令中执行命令行/bin/sh -c 'myscript...'

你能解释一下为什么我必须改变这么多东西才能让它工作吗?特别是为什么我必须将其更改forwhile?

注意:我完全修改了这个问题,因为它是一团糟。

4

0 回答 0