名前がすべて5003.jpgの何百もの.jpgファイルを移動し、名前を変更します。

名前がすべて5003.jpgの何百もの.jpgファイルを移動し、名前を変更します。

取引はこれです。私のガールフレンドは、私が彼女のiPhone上のすべての写真を彼女のラップトップに転送したい(私たちはUbuntu 14.04を実行しています)。私が試した専用プログラムのどれも動作しなかったので、私は彼女のiPhone上のすべての写真を含むDCIM /フォルダ全体をコピーしました。私のジレンマはDCIM /が4つのフォルダに分かれており、写真ごとに別々のフォルダがあるということです。各フォルダ内の各写真の名前は「5003.jpg」です。

コマンドラインを使用して、これらのすべてのファイル(おそらく0001.jpg、0002.jpgなどの昇順の数字名を含む)を〜/ Pictures / iPhone /のようなフォルダに移動して名前を変更したいと思います。

これまで私がしたことは、各ファイルへのすべての個別のパスを含むテキストファイルをコンパイルすることです。

いくつかのパス名の例:

/home/jennie/Pictures/DCIM/101APPLE/IMG_1703.JPG/5003.JPG
/home/jennie/Pictures/DCIM/101APPLE/IMG_1431.PNG/5003.JPG
/home/jennie/Pictures/DCIM/101APPLE/IMG_1933.JPG/5003.JPG
/home/jennie/Pictures/DCIM/101APPLE/IMG_1388.JPG/5003.JPG
/home/jennie/Pictures/DCIM/101APPLE/IMG_1954.JPG/5003.JPG
/home/jennie/Pictures/DCIM/101APPLE/IMG_1524.JPG/5003.JPG
/home/jennie/Pictures/DCIM/101APPLE/IMG_1897.PNG/5003.JPG
/home/jennie/Pictures/DCIM/101APPLE/IMG_1582.PNG/5003.JPG
/home/jennie/Pictures/DCIM/101APPLE/IMG_1007.PNG/5003.JPG
/home/jennie/Pictures/DCIM/101APPLE/IMG_1502.JPG/5003.JPG

答え1

最終ファイル名は柔軟に指定できます。これは最新のスマートフォンからインポートされた写真なので、写真をexiftool自動的に整理して名前を変更することをお勧めします。

  1. ~/Pictures/iPhoneまず、必要に応じて常に信頼できるようにコンテンツのコピー/バックアップを作成します。
  2. exiftool次のオプションを使用してコマンドプロンプトで実行します。
$ exiftool -P -r '-FileName<DateTimeOriginal' -d ~/outdir/%Y-%m-%d/%H/%Y-%m-%d_%H.%M.%S.%%e ~/Pictures/iPhone

これにより、写真が削除され、~/Pictures/iPhoneiPhoneが各写真に自動的に挿入するEXIFタイムスタンプデータに基づいて写真を再構成し、名前を変更して、新しく作成した~/outdirディレクトリに配置する必要があります。結果のディレクトリパスとイメージファイル名は次のとおりです。

 ~/outdir/2016-01-03/10/2016-01-03_10.38.58.jpg

インストール

それ以外の場合はexiftoolインストールできます。

$ sudo apt-get install libimage-exiftool-perl

オプション

  • '-FileName<DateTimeOriginal'文字通り、議論の一部
  • -d~/outdir選択した別のパスに変更できるターゲットテンプレートを指定します。
  • 現在、%H/各日付ディレクトリ内に時間別のサブディレクトリをさらに作成する部分があります。このような時間ごとのサブディレクトリが必要ない場合は、次のように時間部分を省略できます。~/outdir/%Y-%m-%d/%Y-%m-%d_%H.%M.%S.%%e
  • または、各日付の目次を必要とせずに画像のみを直接含める場合は、~/outdir日付目次の部分を省略して次のようにします。~/outdir/%Y-%m-%d_%H.%M.%S.%%e

答え2

#!/bin/bash

appledir="$HOME/Pictures/DCIM/101APPLE"
jpgname="5003.JPG"

for   dir   in "$appledir"/*
do    if    [[ -d "$dir" ]]
      then
          newfile="$appledir/${dir##*/}"
          mv "$dir"/5003.JPG "$newfile.tmp" &&
          rmdir "$dir" &&
          mv "$newfile.tmp" "$newfile"
      fi
done

初期ツリーは次のとおりです。

$ tree Pictures/
Pictures/
└── DCIM
    └── 101APPLE
        ├── IMG_1002.JPG
        │   └── 5003.JPG
        ├── IMG_1003.JPG
        │   └── 5003.JPG
        └── IMG_1004.JPG
            └── 5003.JPG

スクリプト(./script.sh)を実行すると、次のツリーになります。

$ tree Pictures/
Pictures/
└── DCIM
    └── 101APPLE
        ├── IMG_1002.JPG
        ├── IMG_1003.JPG
        └── IMG_1004.JPG

編集する:

*.PNGファイルの名前を変更するには、*.JPG次のようにします。

for     name   in "$HOME/Pictures/DCIM/101APPLE"/*.PNG
do      mv -i "$name" "${name%PNG}JPG"
done

答え3

1行で使用できます。

find -name '*.JPG' | awk 'BEGIN{ i=1 }{ printf "mv \"%s\" %04d.jpg\n", $0, i++ }'| bash 

たとえば、/ Picturesフォルダで使用します。すべてのJPGファイルを検索すると、awkパイプラインはソースを取得して4桁のカウンタに追加します。私たちはこのパイプをbashに送ります。

答え4

たとえば、このようなものがあります。

cat list-of-files
path1/file1
path2/file1

私たちはできます。a毎回変数をリセットすることをお勧めします。

a=0; cat list-of-files |  while read -r f; do
  echo mv -v "$f" $((++a)).jpg
done 
mv -v path1/file1 1.jpg
mv -v path2/file1 2.jpg

エコチェック。実際の削除のために削除してください。

関連情報