3

以下のスクリプトがあり、問題が発生しています。PDF に一括変換したい PostScript ファイルを含むフォルダーがいくつかあります。これまで Linux でスクリプトを作成したことはほとんどありませんでしたが、これは近いと思います。しかし、それは私が望むようにうまく機能していません。提案はありますか?または私が犯した間違いに気づきましたか?変換後、ファイルを同じ場所に残しておきたい。現在、これはファイルを変換しますが、それらはすべて 1 つのフォルダーにまとめられます。

私は次のようにスクリプトを呼び出します: ./all.ps.to.pdf "/directory/to/process"

#!/bin/sh

STARTDIR=$1
if [ ! -d "$STARTDIR" ]; then
echo No starting directory $STARTDIR
exit 1
fi

find $STARTDIR -name '*.ps' -print | sed -e 's/.ps$//' |
xargs -l -i  ps2pdf \{}.ps
4

4 に答える 4

2

PDF出力ファイル名を明示的に指定するだけです:

find $STARTDIR -name '*.ps' -print | sed -e 's/.ps$//' | xargs -l -i  ps2pdf '{}.ps' '{}.pdf'
于 2012-09-10T19:03:42.083 に答える
2

ここに1つの解決策があります:

find $STARTDIR -name '*.ps' -print |
while read filename
do
  ps2pdf ${filename} ${filename%.ps}.pdf
done
于 2012-09-10T19:03:53.020 に答える
1

私が犯した間違いに気づきましたか?

はい、サー。

コマンドfindはすべて 1 行で入力する必要があります。または、それを 2 行に広げたい場合は\、行継続記号として使用します (これは、最初の行の最後の文字で、その後に空白がないようにする必要があります!)。

あれは...

  • どちらかを使用

    find $STARTDIR -name '*.ps' -print | sed -e 's/.ps$//' | xargs -l -i  ps2pdf \{}.ps
    
  • または使用

    find $STARTDIR -name '*.ps' -print | sed -e 's/.ps$//' | \
    xargs -l -i  ps2pdf \{}.ps
    
  • または使用する

    find $STARTDIR -name '*.ps' -print \
      | sed -e 's/.ps$//'              \
      | xargs -l -i  ps2pdf \{}.ps
    

(あなたがBashの読書の目にとって「より良い」と思うものは何でも...)。

于 2012-09-11T06:20:47.927 に答える
0
for i `find $STARTDIR -name '*.ps'` ; do ps2pdf $i $i.ps.pdf ; done
于 2012-10-30T14:43:19.650 に答える