#filenames #characters #rename #replace #command-line #file-path #shell

app unf

UNixize文件名 — 替换文件名中的讨厌的Unix字符

9个稳定版本

2.1.4 2021年12月11日
2.1.3 2021年6月21日
2.1.2 2021年4月9日
2.1.1 2021年1月21日
0.1.1 2019年6月13日

#321 in 文件系统

MIT 协议

25KB
478

crates.io tests cargo-audit Coverage Status

unf

UNixize文件名 — 替换文件名中的讨厌的Unix字符

关于

文件名中的某些字符对命令行用户来说是个问题。例如,空格和括号在shell中被特殊处理。unf会重命名这些文件,这样你就不必再为你的Windows用户朋友发送的令人烦恼命名的zip文件而烦恼了。

安装

使用cargo

cargo install unf

这将安装到~/.cargo/bin,请确保它在你的PATH中。

Arch Linux

从AUR安装unf

用法

unf [FLAGS] <PATH>...

<PATH>...:要unix化文件名的路径

-r --recursive:递归地unix化目录中的文件名。如果指定的某些路径是目录,unf将递归地对其内容进行操作

-f --force:不交互式提示重命名每个文件

示例

$ unf 🤔😀😃😄😁😆😅emojis.txt
rename '🤔😀😃😄😁😆😅emojis.txt' -> 'thinking_grinning_smiley_smile_grin_laughing_sweat_smile_emojis.txt'? (y/N): y
$ unf -f 'Game (Not Pirated 😉).rar'
rename 'Game (Not Pirated 😉).rar' -> 'Game_Not_Pirated_wink.rar'

递归

$ unf -rf My\ Files/ My\ Folder
rename 'My Files/Passwords :) .txt' -> 'My Files/Passwords.txt'
rename 'My Files/Another Cool Photo.JPG' -> 'My Files/Another_Cool_Photo.JPG'
rename 'My Files/Wow Cool Photo.JPG' -> 'My Files/Wow_Cool_Photo.JPG'
rename 'My Files/Cool Photo.JPG' -> 'My Files/Cool_Photo.JPG'
rename 'My Files/' -> 'My_Files'
rename 'My Folder' -> 'My_Folder'

冲突

$ unf -f -- --fake-flag.txt fake-flag.txt ------fake-flag.txt ' fake-flag.txt' $'\tfake-flag.txt'
rename '--fake-flag.txt' -> 'fake-flag_000.txt'
rename '------fake-flag.txt' -> 'fake-flag_001.txt'
rename ' fake-flag.txt' -> 'fake-flag_002.txt'
rename '	fake-flag.txt' -> 'fake-flag_003.txt'

常见问题解答

这有用吗?

希望对某些人有用。我相信在某些情况下,这个工具是有用的。

  • 下载由非CLI用户上传的文件,特别是命名不佳的大归档
  • 浏览器下载重复附加的(1)
  • 利用宽松的Unix文件名限制的Unix工具(如youtube-dl,它从视频标题创建文件名)

这如何处理冲突?

由于 unf 是一个自动批量重命名工具,可能会存在路径中已经存在 Unix 化文件名的情况。为了解决这个危机,unf 通过在文件名前缀后附加并递增一个零填充的数字来处理。一个示例在这里显示 这里

为什么解决冲突的数字是零填充的?

它有一个很好的特性,当使用按 ASCII 值排序文件名的工具时,如 ls 和 shell 完成时,可以保持有序。

为什么不直接使用 shell 完成来访问问题文件名呢?

Shell 完成可以自动插入反斜杠转义字符,但这不是很理想。反斜杠转义字符会使文件名可读性大大降低。然而,shell 完成对于调用 unf 来说是很棒的。

依赖项

~10–22MB
~281K SLoC