1

多数の写真を含むフォルダーで実行し、ユーザー入力に基づいてそれらをパノラマに順次ステッチする bash スクリプト セットがあります。生成が完了すると、出力ファイルの名前が変更され$x-pano.jpg、1 つ上のフォルダーに移動されます。

私の問題は、番号のプレフィックスがスクリプトの順次実行に基づいていることです。つまり、スクリプトの実行中に生成されたパノラマの数に基づいて、すべてのファイルの名前が変更1-pano.jpgされます。n-pano.jpg

名前の変更プロセスを変更して、ストレージ フォルダーを参照し、最大のファイルを取得するにはどうすればよい$xですか? その番号を 1 増やして、ファイルの数値プレフィックスとして使用したいと考えています。私の現在のコードは

//get the list of files in directory and sort in increasing order
$filelist=$(find ../ -maxdepth 1 -type f | sort -n)

//get number of files
$length=${filelist[@]}

//get the last file
$lastFile=${fileList[$((length-1))]}

ファイルのリストを取得し、昇順でソートして、リストから最後のファイルを取得します。これは私が立ち往生するところです。区切り文字として使用-して、現在の値を取得するにはどうすればよいですか?

4

2 に答える 2

1

これが単なる名前変更タスクであると仮定します。

$ find jason-pics/ -type f
jason-pics/other.jpg
jason-pics/somefile.jpg
jason-pics/mountain.jpg
jason-pics/car.jpg

名前の変更:

i=0 
for jfile in $(find jason-pics/ -type f)
    do 
        echo "Renaming $jfile to jason-pics-rename/$i-pano-$(basename $jfile)" 
        ((i+=1)) 
        cp -v $jfile jason-pics-rename/$i-pano-$(basename $jfile)
done

jason-pics-rename ディレクトリの内容:

$ find jason-pics-rename/ -type f 
jason-pics-rename/4-pano-car.jpg
jason-pics-rename/1-pano-other.jpg
jason-pics-rename/3-pano-mountain.jpg
jason-pics-rename/2-pano-somefile.jpg

basename を削除してファイル名を 1-pano.jpg から n-pano.jpg に変更する

$ i=0; for jfile in $(find jason-pics/ -type f); do echo "Renaming $jfile to jason-pics-rename/$i-pano-$(basename $jfile)" ;((i+=1)); cp -v $jfile jason-pics-rename/$i-pano.jpg; done

内容は次のとおりです。

$ find jason-pics-rename/ -type f 
jason-pics-rename/3-pano.jpg
jason-pics-rename/2-pano.jpg
jason-pics-rename/1-pano.jpg
jason-pics-rename/4-pano.jpg
于 2012-06-21T04:14:26.173 に答える
1

おそらく、 variable の最後から${var%%foo}最も長い部分を削除する構文fooを探しているでしょう:

$ F=1-pano.jpg
$ echo ${F%%-pano.jpg}
1
$ F=1222-pano.jpg
$ echo ${F%%-pano.jpg}
1222

試してみてくださいlastNum=${lastFile%%-pano.jpg}

于 2012-06-21T02:41:27.353 に答える