#rename #magic #system #magic-number #systems-utilities

app nameme

一个基于文件魔数查找文件类型的 CLI 工具,并可选项地重命名它们

2 个不稳定版本

0.2.3 2022年7月22日
0.1.0 2022年7月21日

#28#magic

MIT 许可证

350KB
22K SLoC

nameme

na·me·me | \na-me-me\
1. 一个简单的实用程序,根据文件的魔数找到其真实文件类型,并可选项地重命名它。

用法

nameme 是一个 CLI 程序,给定一个路径,根据内容本身的魔数打印出该路径的内容类型。例如,在一个如下所示的文件夹中

.
├── a
├── Cats
   ├── 1.jpg  	(* <- Actually a BMP image *)
   ├── 2.jpg  
   ├── 3.jpg
   └── 4.jpg
└─ Dogs
   ├── 1.jpg
   ├── 2.jpg
   ├── 3.jpg 	(* <- Actually a GIF *)
   └── 4.jpg

调用 nameme . 将打印

$ nameme . 
Format	 	Results	Erroneous
BMP		1		1
GIF		1		1
JPG		7		0

要查看哪些文件命名错误,可以使用 nameme --verbose

$ nameme --verbose . 
Format		Results	Erroneous
BMP		1		1
	./Cats/1.jpg
GIF		1		1
	./Dogs/3.jpg
JPG		7		0
	./Cats/3.jpg
	./Cats/5.jpg
	./Cats/2.jpg
	./Cats/4.jpg
	./Dogs/1.jpg
	./Dogs/2.jpg
	./Dogs/4.jpg

nameme 的另一个用途是自动根据文件的魔数重命名文件[^1]

$ tree .
.
├── Cats
   ├── 1.jpg
   ├── 2.jpg
   ├── 3.jpg
   ├── 4.jpg
   └── 5.jpg
└── Dogs
    ├── 1.jpg
    ├── 2.jpg
    ├── 3.jpg
    └── 4.jpg
$ nameme --rename --auto .
$ tree .
.
├── Cats
   ├── 1.bmp
   ├── 2.jpg
   ├── 3.jpg
   ├── 4.jpg
   └── 5.jpg
└── Dogs
    ├── 1.jpg
    ├── 2.jpg
    ├── 3.gif
    └── 4.jpg

如果你希望被询问某个文件是否应该重命名,可以将上一个例子中的调用中的 --auto 标志移除,这样 nameme 将会对每个可能的重命名进行询问

$ nameme --rename .
rename ./Cats/1.jpg -> ./Cats/1.bmp? [Y/n] y
rename ./Dogs/3.jpg -> ./Dogs/3.gif? [Y/n] y

待办事项

列表中标记为完成的项目仍然可以改进。

  • 每个头部模式可能对应多个扩展名。当重命名文件时,用户应该能够从可用的扩展名中选择所需的扩展名。

  • 用户应该能够决定是否贪婪地匹配头部(即,取最长的匹配,就像现在这样)或懒惰地匹配(即,取最短的匹配)。

  • 当在大型目录上调用时,nameme 可以变得相当慢。找出问题所在。

  • file 能够确定某些文本文件的类型(例如,json)。找出是否在这里实现类似的功能有意义,以及如何实现。

致谢

这个库和应用程序基于 GCK 的文件签名表,在 MIT 许可证下分发。[^1]: 单个头部模式可能对应多个可能的扩展名。理想情况下,用户应该能够选择选择可用的扩展名,但这对于大文件来说可能会非常繁琐。

依赖项

~9–22MB
~268K SLoC