我的照片导入器从我的相机中移动文件并重命名它们,但我忘记指定它应该保留文件扩展名。所以我有几个文件夹,其中包含数百个 JPG 和 AVI 文件,这些文件都缺少正确的扩展名。
没有那么多视频文件,所以我可以在一般批量重命名为 JPG 之前或之后手动重命名它们。
使事情变得更复杂的是,文件名包含空格,所以我不能只是mv "*" "*.jpg"
因为,好吧,那行不通(但这就是我要做的,来自 DOS/Windows)。
我知道 Linux 充满了强大的命令。当这些文件包含空格时,如何批量重命名文件以添加 .jpg 扩展名?
请不要说“不要使用空格”,因为那真的不是我要问的。谢谢。
如果使用得当,Shell glob 甚至可以在名称中使用空格,例如
或者
[注意:这些是“无操作”,直到
n
开关或被echo
移除 - 因此您可以在提交之前检查正确的替换]如果您确实想自动区分 jpg 和 avi 文件,也可以使用更复杂的循环和
file
ormimetype
命令如果您有一个更复杂的层次结构,您将需要稍微复杂一些的方法。您可以使用 bash 的
globstar
选项来**
匹配零个或多个目录和子目录,也可以使用find
.环球之星
[ -f "$f" ] &
确保该命令mv
仅在文件而不是目录上运行。find
这
-type f
确保我们只找到文件而不是目录,并且打印其输出的print0
原因find
是用空字符 (\0
) 而不是换行符分隔。这确保我们正确处理包含空格或换行符或其他怪异的文件名。xargs
获取输入列表并运行其上给出的命令。该-0
标志告诉它期望以空分隔的输入,并且-I{}
将使其用{}
传递的每个输入记录(在本例中为文件)替换每个实例。请
man rename
在尝试之前参考这应该像一个魅力。
在终端中:
请将“jpg”更改为您需要的任何内容。
rename
可以使用 perl 表达式..你最好的朋友在第一行你输入了你的文件目录
前
s
表达式表示替换然后将搜索任何具有字母数字和下划线名称但没有扩展名的文件
并替换添加到它。一个点.jpg
最后应用于第一行文件夹中的任何文件
我建议您使用一个名为
pyrenamer
.打开它,然后在重命名文件名模式中,输入
{1}.jpg
.我在管理系统时经常遇到这种情况,尤其是在处理由 Windows 应用程序创建的文件名时。要在没有任何扩展名的文件名上添加
.jpg
扩展名,请考虑此命令列表。find
-print0
为分隔符生成 NULL 字符,xargs-0
用于接受这些 NULL 分隔符。这也将对任何子目录执行此操作,因此请务必替换该“./example”路径。rename
是一个很棒的命令,但它在实现和规范方面都是特定于发行版的。我通常rename
在命令行上使用类似的东西,但我总是为我的脚本编写 GNU utils 标准。使用此命令: