#image #exif #sorting #graphics #organzing

app exifmv

根据EXIF标签将图像移动到文件夹层次结构中

7个版本

0.4.1 2023年9月23日
0.4.0 2023年9月7日
0.2.2 2023年9月3日
0.2.0 2023年3月22日
0.1.3 2022年2月24日

#108 in 图像

每月下载量39次

Apache-2.0…

23KB
339

exifmv

build Maintenance

根据EXIF标签将图像移动到文件夹层次结构中。

目前层次结构是硬编码到工具中的,因为这符合我的需求。将来这应该由支持正则表达式等的人可读字符串进行配置。

现在内置的字符串是这样的

{目标}/{年份}/{月份}/{日期}/{文件名}.{扩展名}

例如,如果你有一个拍摄于2020年8月15日的名为Foo1234.ARW的图像,它将最终位于如下文件夹层次结构中

2020
├── 08
│   ├── 15
│   │   ├── foo1234.arw
│   │   ├── …

安全性

使用默认设置,exifmv仅使用移动/重命名来组织文件。你唯一的风险是文件最终出现在你不希望它们出现的地方。

但是——如果你指定了--remove-source,它将删除原始文件

在这种情况下,原始文件将被永久删除!

或者,你可以使用--trash-source,它将源文件移动到用户的回收站文件夹,从那里可以在大多数操作系统中恢复到原始位置。

在执行任何删除或移动到回收站之前,exifmv会检查文件大小是否匹配。这并不等同于逐字节检查文件。但是由于几乎所有图像文件格式都使用某种形式的压缩,匹配大小对于本应用程序来说是一个很好的文件相同的指示器。

话虽如此:我已经使用这个应用程序大约七年了,没有丢失任何图像。因此,我有相当多的经验证据表明它不会破坏数据。

尽管如此——编写一些适当的测试可能会比我的话给其他人更多的信心。直到我找到时间做那件事:你已经被警告了。

使用方法

USAGE:
    exifmv [OPTIONS] <SOURCE> [DESTINATION]

ARGS:
    <SOURCE>         Where to search for images
    <DESTINATION>    Where to move the images (if omitted, images will be moved to current dir)
                     [default: .]

OPTIONS:
        --day-wrap <H[H][:M[M]]>    The time at which the date wraps to the next day [default: 0:0]
        --dry-run                   Do not move any files (forces --verbose)
    -h, --help                      Print help information
    -H, --halt-on-errors            Exit if any errors are encountered
    -l, --make-lowercase            Change filename & extension to lowercase
    -L, --dereference               Dereference symbolic links
    -r, --recurse-subdirs           Recurse subdirectories
        --remove-source             Delete any SOURCE file existing at DESTINATION and matching in
                                    size
        --trash-source              Move any SOURCE file existing at DESTINATION and matching in
                                    size to the system's trash
    -v, --verbose                   Babble a lot
    -V, --version                   Print version information

历史

这是基于一个Python脚本,该脚本基本上做了同样的事情,并且很好地为我服务了15年。当我2018年开始学习Rust时,我决定将Python代码移植到Rust CLI应用程序,作为学习经验。

因此,这个应用程序可能不是你最近遇到的最好看的代码。它也可能包含非惯用(即非Rust)的编程方式。如果你愿意修复这些中的任何一项或添加一些酷炫的功能,我期待着合并你的PR。干杯!

当前版本:0.1.2

许可证

Apache-2.0 OR BSD-3-Clause OR MIT OR Zlib,由你自行选择。

依赖项

~6–33MB
~485K SLoC