web-dev-qa-db-ja.com

特定の順序で画像の名前を変更する

これが私の問題です:500個の画像が含まれるフォルダーがあります:

1.jpg
2.jpg
3.jpg

等々..

そのフォルダをコピーし、同じ写真を501から1000に名前を変更する必要がありますが、次のようにします。

1.jpg  becomes    501.jpg
2.jpg  becomes    502.jpg
3.jpg  becomes    503.jpg          
....

標準の名前変更コマンドを使用する場合:

i=501;for img in $(find . -iname '*.jpg'); do echo -n "Converting $img"; mv $img $i.jpg  && echo $i && ((i++)); done

501から1000の画像を注文しますが、それらはすべて散在しています:

23.jpg becomes 501.jpg,    
66.jpg becomes 502.jpg 
...   

(それらは正しい順序ですが、それらを混同します)

私はそれがおそらく欠けている1つのコマンドであることを知っています...

8
Painkiller

Thunarを試してください。これはXfceのデフォルトのファイルマネージャーです。非常に軽量で、便利な一括名前変更ツールが付属しています。ターミナルで次のコマンドを実行してThunarをインストールできます。

Sudo apt-get install thunar

おそらくUbuntuソフトウェアからもインストールできるでしょう。

ユーティリティの使用方法

  1. Thunarをインストールしたら、Bulk Renameユーティリティを起動します。
  2. +アイコンをクリックし、適切な順序で名前を変更するファイルを追加します。
  3. 選択したファイルのリストのすぐ下にあるドロップダウンボックスをクリックし、番号付けを選択します。その隣のボックスをクリックして、名前のみを選択します。
  4. Start With:」ボックスに501と入力し、「Text:」ボックスは空です。 New Name列に変更のプレビューが表示されます。
  5. 変更を適用するには、Rename Filesボタンをクリックします。

ナンバリングに加えて、このユーティリティは次のアクションをサポートしています。

  • 日付/時刻を挿入
  • 挿入/上書き
  • キャラクターを削除
  • 検索と置換
  • 大文字小文字
7
pomsky

findコマンドは、「ディレクトリ」順にファイルを検索します(23.jpg66.jpg、...)。検索後に|sortを追加できます。

しかし、メソッドは複雑すぎます。

for i in $( seq 1 500 ) ; do
    j=$(( $i + 500 ))
    mv $i.jpg $j.jpg
done 
13
waltinator

renameコマンドを使用。

rename -n 's/^(\d+)/sprintf("%d",$1+500)/e' *.jpg

または、純粋なbashシェルパラメーター展開 を使用します。

for FILE in *.jpg; do
    mv "$FILE" "$(( ${FILE%.jpg}+500 )).jpg" 
done 
11
αғsнιη

あなたが正しく尋ねていることを理解していれば、デフォルトの名前変更ツールを使用してそれを行うことができると思います:

rename 's/^(\d+)/sprintf("%d",$1+500)/e' *.jpg -vn

変更を有効にするには、テスト後に-vn(詳細-アクションなし)スイッチを削除する必要があります。

5
sempaiscuba

シェルコマンドだけでこれを達成する別の方法

count = 1; for i for ls; do mv $ i CN $((count ++))。$ {i ## *。};やった

0
aneeshep