#排序 #日期 #重命名 #EXIF #目标目录 #文件名 #照片

bin+lib photo_sort

一个用于根据EXIF日期/元数据重命名和排序照片/视频的工具。它试图从EXIF数据或文件名中提取日期,并按照给定的格式字符串重命名图像文件。对每个源目录中的所有图像进行处理并重命名到目标目录

5个版本

0.1.5 2024年4月16日
0.1.4 2024年2月26日

#156 in 图像

Download history 149/week @ 2024-04-16 6/week @ 2024-05-21 7/week @ 2024-06-25

每月567次下载

GPL-3.0-or-later

49KB
565

PhotoSort

PhotoSort是一个用Rust编写的强大命令行工具,旨在简化您照片/视频收藏的管理。它通过从源目录获取图像/视频,从文件名或其EXIF/元数据数据中提取日期,然后将文件移动或复制到目标目录来工作。

PhotoSort解决了来自不同相机和设备、使用不同命名约定创建文件的图片/视频的问题。在文件浏览器中查看时可能会令人困惑,因为图片/视频没有按日期排序。PhotoSort通过根据图像/视频的EXIF/元数据数据或文件名重命名图像/视频来解决这个问题,统一了命名约定,使您能够按日期浏览图片/视频。

文档可以在这里找到:https://docs.rs/photo_sort

特性

  • 自定义目标格式:您可以为重命名的文件定义自己的目标日期和文件名格式。
  • 分析模式:选择如何从您的文件中提取日期。仅EXIF、仅名称或组合。
  • 移动模式:选择如何将文件移动到目标目录。选项包括移动、复制、硬链接、符号链接或相对符号链接。
  • 递归源目录:PhotoSort可以递归搜索源目录。
  • 模拟运行模式:在不更改您的文件的情况下测试工具。工具将打印出它将采取的操作,而不会实际执行它们。
  • 排序照片和视频:PhotoSort可以根据元数据对照片和视频进行排序。

使用方法

要使用PhotoSort,您需要传递一组参数以定义您想要如何排序照片。以下是一个示例

photo_sort \
  --source_dir /path/to/photos \
  --target_dir /path/to/sorted_photos

此命令将按顺序对 /path/to/photos 目录中的照片进行排序,根据它们的EXIF数据或名称重命名,然后移动到 /path/to/sorted_photos 目录。

另一个示例

photo_sort \
  --source_dir /path/to/photos \
  --recursive \
  --target_dir /path/to/sorted_photos \
  --analysis-mode "exif_then_name" \
  --date-format "%Y-%m-%d-_%H%M%S" \
  --file-format "{:date}{:?dup}" \
  --extensions "png,jpg" \
  --move-mode "hardlink"

此命令将对 /path/to/photos 目录及其子目录中的照片进行排序,根据它们的EXIF日期(如果找不到则使用名称)重命名,然后将它们硬链接到 /path/to/sorted_photos 目录。文件将被重命名为以下格式 YYYY-MM-DD_HHMMSS[_##],只有 .png.jpg 文件将被处理。

要获取完整选项列表,请运行 photo_sort --help

$ photo_sort --help

A tool to rename and sort photos by its EXIF date. It tries to extract the date
from the EXIF data or file name and renames the image file according to a given
format string.

Foreach source directory all images are processed and renamed to the target directory

Usage: photo_sort [OPTIONS] --source-dir <SOURCE_DIR>... --target-dir <TARGET_DIR>

Options:
  -s, --source-dir <SOURCE_DIR>...     The source directory to read the photos from
  -t, --target-dir <TARGET_DIR>        The target directory to write the sorted photos to
  -r, --recursive                      Whether to search the source directories recursively. If the flag is not set only immediate children of the source directories are considered
      --date-format <DATE_FORMAT>      Date format string to use for the target directory. The format string is passed to the `chrono` crate's `format` method [default: %Y%m%d-%H%M%S]
  -f, --file-format <FILE_FORMAT>      The target file format. {:date} is replaced with the date and {:name} with the original file name. {:dup} is replaced with a number if the file already exists. {:date} is replaced with the date and {:name} with the original file name. {:?dup} is replaced with _{:dup} if the file already exists [default: IMG_{:date}_{:name}{:?dup}]
  -e, --extensions [<EXTENSIONS>...]   A comma separated list of file extensions to include in the analysis [default: jpg,jpeg,png,tiff,heif,heic,avif,webp]
  -a, --analysis-mode <ANALYSIS_MODE>  The sorting mode, possible values are name_then_exif, exif_then_name, only_name, only_exif. Name analysis tries to extract the date from the file name, Exif analysis tries to extract the date from the EXIF data [default: exif_then_name]
  -m, --move-mode <MOVE_MODE>          The action mode, possible values are move, copy, hardlink, relative_symlink, absolute_symlink. Move will move the files, Copy will copy the files, Hardlink (alias: hard) will create hardlinks, RelativeSymlink (alias: relsym) will create relative symlinks, AbsoluteSymlink (alias: abssym) will create absolute symlinks [default: move]
  -n, --dry-run                        Dry-run If set, the tool will not move any files but only print the actions it would take
  -v, --verbose                        Be verbose, if set, the tool will print more information about the actions it takes. Setting the RUST_LOG env var overrides this flag
  -d, --debug                          Debug, if set, the tool will print debug information (including debug implies setting verbose). Setting the RUST_LOG env var overrides this flag
  -h, --help                           Print help
  -V, --version                        Print version        
  
When building with video support enabled (see below):
      --video-extensions [<VIDEO_EXTENSIONS>...]  A comma separated list of video extensions to include in the analysis [default: mp4,mov,avi]                                                                                                                                                                 

安装

要安装PhotoSort,您需要在您的系统上安装Cargo。

cargo install photo_sort

或者

git clone https://github.com/0xCCF4/photo_sort.git
cd photo_sort
cargo install --path .

然后 photo_sort 可执行文件将可用。

要使用视频排序功能,请按照https://crates.io/crates/ffmpeg-next上的说明以及相应的wikihttps://github.com/zmwangx/rust-ffmpeg/wiki/Notes-on-building。安装依赖项后,您可以启用 video 功能安装 photo_sort 可执行文件。

cargo install --features video photo_sort

或者

git clone https://github.com/0xCCF4/photo_sort.git
cd photo_sort
cargo install --features video --path .

贡献

欢迎使用对PhotoSort的贡献!如果您有功能请求、错误报告或想为代码做出贡献,请打开一个问题或拉取请求。

许可证

PhotoSort遵循GPLv3许可证。有关更多详细信息,请参阅LICENSE文件。

依赖项

~5–15MB
~166K SLoC