27 个版本
0.7.2 | 2024 年 8 月 7 日 |
---|---|
0.7.1 | 2024 年 1 月 22 日 |
0.7.0 | 2023 年 3 月 14 日 |
0.6.0 | 2022 年 9 月 4 日 |
0.2.10 | 2021 年 3 月 25 日 |
#494 in 命令行工具
每月 139 次下载
135KB
1.5K SLoC
fif 递归扫描指定的目录,并输出一个 shell 脚本以修复任何具有错误扩展名的文件的名称。默认情况下,fif 将扫描指定目录中的所有非隐藏文件,并将忽略符号链接。
由于 fif 将输出打印到 stdout 而不是直接对文件进行操作,您可能希望将其输出重定向到文件,例如 fif ~/Documents > output.sh
。您也可以直接将输出管道到您的 shell 中,例如 fif ~/Documents | bash
,尽管这不建议这么做 - 在运行之前,您应该查看 fif 的输出并自行验证它不会做任何让您头疼的事情。
特性
- ✅ 跨平台
- ✅ 多线程
- ✅ 可配置
构建
fif 可以使用 Cargo 构建、安装和测试,就像大多数 Rust 程序一样
git clone https://gitlab.com/Lynnesbian/fif/
cd fif
# run tests (optional)
cargo test --locked
# build fif with its default feature set
cargo build --locked --release
使用 --locked
标志可以确保 Cargo 使用 锁文件 中指定的依赖项版本,而使用 --release
标志可以启用发布优化来构建 fif -- 这需要更长的时间,但生成的二进制文件要快得多。
安装
# install the fif crate (to ~/.cargo/bin or %USERPROFILE%\.cargo\bin by default)
cargo install --locked fif
要更新,只需重新运行 install
命令,或者使用像 cargo-update 这样的工具,它可以更新通过 cargo install
安装的包。
在 macOS 上,fif
可以通过 MacPorts 安装
sudo port selfupdate
sudo port install fif
Cargo 功能
五进制支持使用 infer
或 xdg-mime
作为其查找文件类型的后端。默认情况下,xdg-mime 将在 *nix 系统(Linux、macOS、*BSD 等)上使用,在其他所有系统上使用 infer。
xdg-mime
应该可以在安装了 Shared MIME Info 库的任何 *nix 系统上运行(请咨询您的软件包管理器),尽管我仅在 Linux 和 FreeBSD 上测试过。 infer
应该可以在任何系统上运行,但它支持的文件类型远少于 xdg-mime
,这得益于出色的 Shared MIME Info 库。
您可以在编译时像这样覆盖您系统的默认后端
# xdg-mime
cargo install fif --locked --features=xdg-mime-backend
# infer
cargo install fif --locked --features=infer-backend
还可以通过不安装默认功能来获得更精简的构建
cargo install fif --locked --no-default-features
这将禁用一些非必要但很受欢迎的功能,例如多线程支持。
有关五进制的编译时功能的更多信息,请参阅 维基。
用法
有关更多信息,请参阅 fif --help
。
基础知识
使用五进制的最简单方法是
fif ~/Downloads
此命令将扫描您 ~/Downloads
目录中的所有非隐藏文件。
可以使用 -e
和 -E
标志分别指定要扫描的个别扩展名和扩展名集。
# only scan files with the extensions .jpeg, .jpg, .zip, and .docx
fif -e jpeg,jpg,zip,docx ~/Documents
# only scan files with "image extensions" - .jpg, .png, .gif, .webp...
fif -E images ~/Pictures
# scan .zip files, videos, and audio
fif -e zip -E videos,audio ~/Downloads
两者 -e
和 -E
都有等效的 -
和 -
标志,用于排除而不是包含指定的扩展名。
# scan everything except filenames ending in .zip
fif -x zip ~/Downloads
# scan all files with image extensions, but not .jpg and .jpeg files
fif -x jpg,jpeg -E images ~/Pictures
# scan everything except text and system files
fif -X text,system ~/.local/share
输出
默认情况下,五进制将输出一个 bash 脚本(在 Windows 上是 PowerShell 脚本),可以用来修复所有文件扩展名不正确的文件。
您可能希望将此脚本输出到文件(而不是输出到 stdout)。
fif ~/Documents > output.sh
您还可以手动指定要使用的输出格式。
fif -O powershell ~/Documents > output.ps1
--fix
标志
如果您更希望五进制自己修复重命名的文件,而不是依赖于 shell 脚本,可以使用 --fix
标志。
# rename any misnamed .jpg files in the user's pictures directory
fif ~/Pictures --fix -e jpg
# fix any misnamed files found in the user's downloads
fif ~/Downloads --fix
默认情况下,五进制将避免采取任何可能具有破坏性的操作(将文件重命名为已存在的名称)。此行为可以通过使用 --overwrite
标志来禁用,该标志将提示您覆盖现有文件。五进制还会在出错时提示您重试。
有关 --fix
标志的工作方式以及它与 --overwrite
标志和 --prompt
参数的关联的更多信息,请参阅 相应的维基页面。
日志记录
默认情况下,五进制将在执行过程中记录任何信息、警告和错误。这可以通过 -
标志来更改。
# also log debug info
fif -v ~/Downloads
# ...and trace info
fif -vv ~/Downloads
您还可以使用 -
标志降低日志记录级别。
# don't show info
fif -q ~/Downloads
# ...or warnings
fif -qq ~/Downloads
# ...or even errors!
fif -qqq ~/Downloads
通过设置环境变量 FIF_LOG
或 RUST_LOG
为 off
、trace
、debug
、info
、warn
或 error
来修改日志记录的详细程度。通过 FIF_LOG
设置的值会覆盖 RUST_LOG
,两者都会覆盖 -
和 -
标志。
例如
# show all levels except trace
FIF_LOG=debug fif ~/Downloads
# only show errors
FIF_LOG=error fif ~/Downloads
五个日志级别如下所示
级别 | 描述 | 示例 |
---|---|---|
错误 | 导致 fif 停止运行的错误 | fif 无法打开提供的目录 |
警告 | 不会导致 fif 停止运行的警告 | fif 无法确定给定文件的 MIME 类型 |
信息 | 关于 fif 状态的信息 | 目录已成功扫描,无需重命名任何文件 |
调试 | 调试信息 - 通常对最终用户不重要 | fif 将考虑的扩展名列表 |
跟踪 | 跟踪信息 - 通常对最终用户不重要 | "发现 15 项待检查", "扫描成功",等等。 |
要详细了解所有 fif 参数及其用法,请运行 fif --help
(或运行 fif -h
以获取更简洁的概述)。
版本策略
fif 遵循 语义版本控制 原则。当 fif 处于 0.x 版本时,版本号将按以下方式更新
- 当我认为 fif 已经“功能完整”时,主版本号将增加到 1。
- 当我在 fif 中添加一个相当重要的功能时,次要版本号将增加(在以前,这发生在添加排除扩展名的功能以及 fif 获得输出 bash 脚本而不是无效文件名列表的能力时)。次要版本号还将增加 MSRV。
- 在所有其他情况下(包括次要功能添加)将增加修补版本,包括添加更多输出格式和“忽略未知扩展名”标志等功能。
如果 fif 达到 1.0 版本,这些规则可能将与现在相同。
代码风格
fif 使用 rustfmt
格式化,使用夜间工具链,具体命令为 cargo +nightly fmt
。使用制表符进行缩进,假定制表符宽度为两个空格。行宽为 120 个字符。花括号放在同一行("OTBS" 格式),除了泛型参数中的 where
子句。
有关此项目使用的格式化规则更详细的信息,请参阅 rustfmt.toml
中配置的选项。
额外致谢
一些关于正确处理具有多个有效扩展名的文件(特别是在可移植可执行格式的情况下)的代码来自 Czkawka
许可证
版权所有 (C) 2021 Lynnesbian
本程序是自由软件:您可以自由分发和/或修改它,具体请参阅由自由软件基金会发布的 GNU 通用公共许可证的条款,许可证版本 3 或(根据您的选择)任何更高版本。
本程序分发时附带希望对您有用,但没有任何保证;甚至没有关于适销性或适用于特定目的的暗示性保证。有关详细信息,请参阅 GNU 通用公共许可证。
您应该已收到本程序的 GNU 通用公共许可证副本。如果没有,请参阅 https://www.gnu.org/licenses/。
依赖关系
~7–17MB
~234K SLoC