移动和重命名数百个 .jpg 文件,全部命名为 5003.jpg

移动和重命名数百个 .jpg 文件,全部命名为 5003.jpg

协议是这样的,我的女朋友希望我将她的所有照片从她的 iPhone 转移到她的笔记本电脑上(我们运行的是 Ubuntu 14.04)。我尝试使用的所有专用程序都不起作用,所以我只是复制了整个 DCIM/ 文件夹,其中包含她 iPhone 上的所有图片。我的困境是 DCIM/ 被分为四个文件夹,其中包含她的每张照片的单独文件夹。在每个文件夹中,每张图片都具有相同的名称“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/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

您可以在一行中使用它:

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

回声检查。删除它以进行实际删除。

相关内容