取引はこれです。私のガールフレンドは、私が彼女の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
自動的に整理して名前を変更することをお勧めします。
~/Pictures/iPhone
まず、必要に応じて常に信頼できるようにコンテンツのコピー/バックアップを作成します。exiftool
次のオプションを使用してコマンドプロンプトで実行します。
$ exiftool -P -r '-FileName<DateTimeOriginal' -d ~/outdir/%Y-%m-%d/%H/%Y-%m-%d_%H.%M.%S.%%e ~/Pictures/iPhone
これにより、写真が削除され、~/Pictures/iPhone
iPhoneが各写真に自動的に挿入する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
エコチェック。実際の削除のために削除してください。