20

私は元々、image_001.jpg、image_002.jpg、...という形式の一連の画像を持っていました。

私はそれらを調べて、いくつかを削除しました。ここで、残りのファイルの名前を image_001.jpg、image_002.jpg、... に戻します。

これをきちんと行うLinuxコマンドはありますか? 名前の変更には慣れていますが、このようにファイル名を並べ替えるものは何も表示されません。ファイルを順番に(ギャップを付けて)リストしているのでls *.jpg、解決策はその出力をbashループなどに渡すことだと思いますか?

4

6 に答える 6

14

私の理解が正しければ、たとえば image_001.jpg、image_003.jpg、image_005.jpg があり、image_001.jpg、image_002.jpg、image_003.jpg に名前を変更したいと考えています。

編集:これは、一時ファイルを現在のディレクトリに配置するように変更されています。Stephan202 が指摘したように、temp が別のファイルシステムにある場合、これは大きな違いを生む可能性があります。ループで一時ファイルにヒットするのを避けるために、イメージを通過するようになりました*

i=1; temp=$(mktemp -p .); for file in image*
do
mv "$file" $temp;
mv $temp $(printf "image_%0.3d.jpg" $i)
i=$((i + 1))
done                                      
于 2009-05-19T00:47:32.240 に答える
9

単純なループ ( でテスト、echoで実行mv):

I=1
for F in *; do
  echo "$F" `printf image_%03d.jpg $I`
  #mv "$F" `printf image_%03d.jpg $I` 2>/dev/null || true
  I=$((I + 1))
done

2>/dev/null || true(ソースファイルとターゲットファイルが同一であるという警告を抑制するために追加しました。これが気に入らない場合は、 Matthew Flaschen回答を参照してください。)

于 2009-05-19T00:46:43.037 に答える
2

次のスクリプトを試してください。

numerate.sh

切り取られたこのコードは仕事をするはずです:

./numerate.sh -d <your image folder> -b <start number> -L 3 -p image_ -s .jpg -o numerically -r
于 2014-09-23T20:07:55.103 に答える
1

これは、求めていることとは逆のことを行います (*.jpg.001 形式のファイルを取得して *.001.jpg に変換する) が、目的に合わせて簡単に変更できます。

for file in * 

do

if [[ "$file" =~ "(.*)\.([[:alpha:]]+)\.([[:digit:]]{3,})$" ]]

then

mv "${BASH_REMATCH[0]}" "${BASH_REMATCH[1]}.${BASH_REMATCH[3]}.${BASH_REMATCH[2]}"

fi

done
于 2009-05-19T00:43:52.577 に答える
1

ここにはすでにいくつかの良い答えがあります。しかし、エラーを隠すことに頼っている人もいますが、これは良い考えではありません (これはmv、予期される条件のためにのみエラーになると想定しています。他のすべての理由でmvエラーが発生する可能性はありますか?)。

さらに、それはもう少し短くすることができ、より適切に引用されるべきです:

for file in *; do
    printf -vsequenceImage 'image_%03d.jpg' "$((++i))"
    [[ -e $sequenceImage ]] || \
        mv "$file" "$sequenceImage"
done

また、bash スクリプトでは変数を大文字にしないでください。

于 2009-05-19T06:28:36.920 に答える
0

for ループ、イテレータ、cut -f1 -d "_"、mv i i.iterator を使用して、上記のようなことを提案するつもりでした。ただし、すでに他の方法でカバーされているようです。

于 2009-05-19T00:49:21.580 に答える