#media #media-file #directory-structure #date #directory-tree #config-file #video

bin+lib the-media-organizer

使用日期按目录树结构将给定目录中的媒体文件组织到指定的目的地

2 个稳定版本

1.1.0 2024年1月15日
1.0.0 2022年1月2日

#209 in 图像

MIT 许可证

2.5MB
831

媒体组织器

使用日期按目录树结构将给定目录中的媒体文件组织到指定的目的地。

让我们假设你有一个包含一些媒体文件的文件夹,例如

$ tree /media-to-sort
 media-to-sort
 ├── images
   ├── camera
   │  └── camera-001.jpg
   └── whatsapp-images
      └── IMG-20200407-WA0004.jpg
 └── videos
    └── 20200829_205420.mp4

通过像这样运行此项目

./the-media-organizer --media-src /media-to-sort --photos-dst /my-photos --videos-dst /my-videos

文件将被排序为

$ tree /
 /
 ├── my-photos
    ├── 2019
    │  └── 01 - January
    │     └── camera-001.jpg
    └── 2020
       └── 04 - April
          └── IMG-20200407-WA0004.jpg
 └── my-videos
    └── 2020
       └── 20200829_205420.mp4

发生了什么?图片按年份和月份排序,日期首先从 EXIF 数据中获取,如果图片没有 EXIF,则从名称中获取。视频按年份组织,日期从名称中获取。

项目将从源移动到目的地(不复制),如果目的地中已存在同名文件,则会显示错误并继续处理下一个项目。

安装

您可以使用 cargo 进行安装

cargo install the-media-organizer

然后只需运行

the-media-organizer -h
the-media-organizer --media-src /media-to-sort --photos-dst /my-photos --videos-dst /my-videos

您还可以克隆仓库并使用 cargo 运行它

the-media-organizer $ cargo run -- -h
the-media-organizer $ cargo run -- --media-src /media-to-sort --photos-dst /my-photos --videos-dst /my-videos

如何使用它以及为什么使用它?

我的工作流程是将手机相册目录和一些其他媒体文件夹(如 WhatsApp 图片或视频)复制到我的笔记本电脑。我运行这个程序以将照片组织到我的 Amazon Drive 同步文件夹,视频组织到另一个不在 Amazon 的文件夹,然后我将两者同步到外置硬盘。

为什么将视频和照片组织到不同的文件夹?因为我很节俭,Amazon 只为图像提供无限存储。

为什么制作这个?我主要是想学习 Rust。我以前都是手动组织所有媒体,这是一个很好的体验,因为可以再次查看所有内容,但现在我的时间非常有限,事情堆积如山。

为什么不直接从手机同步?我确实有 Google Photos 的备份,但我喜欢我的工作流程,并喜欢在外置硬盘中组织我的内容。我开始这样操作,然后就这样一直坚持下去。

媒体类型组织器

有两种媒体类型组织器,一个用于照片,一个用于视频。

照片组织器

它以两层目录结构组织照片,第一层是年份,第二层是月份。日期从照片的EXIF中获取,如果失败或图像没有EXIF,则尝试从名称中获取日期。

从名称中获取日期只是对WhatsApp和相机使用的格式进行正则表达式匹配,该格式为IMG-YYYYMMDD-WAXXXX.jpgIMG_YYYYMMDD_XXXXX.jpg

只组织以下格式的文件jpegjpgJPG

视频组织器

它根据年份将视频组织到目录中。年份通过正则表达式^(?:VID[-_])?(\d{4})(\d{2})\d{2}[_-].+\.mp4$从文件名中获取,这基本上相当于VID-YYYYMMDD-任意内容.mp4,其中VID-是可选的,-可以被更改到_。是的,它只支持mp4(如果你想要更改它,请提交PR)。

配置

需要指定媒体源目录,以及至少一个照片或视频目标目录。

可以通过命令行参数传递选项

./the-media-organizer -h

USAGE:
    the-media-organizer [FLAGS] [OPTIONS]

FLAGS:
    -h, --help                           Prints help information
        --no-load-default-config-file    Do not load the config file from the default location
    -V, --version                        Prints version information

OPTIONS:
    -c, --config-file <FILE>        File to load configuration from. Defaults to:
                                    - Linux: /home/alice/.config/media-organizer/config.toml
                                    - Windows: C:\Users\Alice\AppData\Roaming\adn\media-organizer\config\config.toml
                                    - Mac: /Users/Alice/Library/Application Support/dev.adn.media-organizer/config.toml
    -m, --media-src <DIRECTORY>     Source directory with media files to organize
    -p, --photos-dst <DIRECTORY>    Directory where photos will be moved and organized
    -v, --videos-dst <DIRECTORY>    Directory where videos will be moved and organized

例如

./the-media-organizer --media-src /media-to-sort --photos-dst /my-photos --videos-dst /my-videos

或使用TOML配置文件

./the-media-organizer -c my-config.toml

其中my-config.toml

$ cat my-config.toml

media_src = '/media-to-sort'
photos_dst = '/my-photos'
videos_dst = '/my-videos'

如果同时指定了命令行参数和文件,则命令行参数将具有优先级。此外,如果没有使用--config-file选项指定文件,则尝试从以下位置加载默认配置文件

  • Linux: /home/alice/.config/media-organizer/config.toml
  • Windows: C:\Users\Alice\AppData\Roaming\adn\media-organizer\config\config.toml
  • Mac: /Users/Alice/Library/Application Support/dev.adn.media-organizer/config.toml

可以通过--no-load-default-config-file标志禁用加载默认配置文件。

测试

只需运行cargo test,这里没有太多花哨的东西。

贡献

欢迎提交PR和问题。

限制

这主要是为了满足我的需求并作为学习练习而量身定制的,因此有一些地方不是很灵活

  • 每种媒体类型组织器支持的文件格式列表。
  • 从文件名获取日期的格式。
  • 目标目录结构和名称。
  • 它只支持图像和视频。

依赖关系

~7–17MB
~204K SLoC