如何从文件扩展名中删除查询参数
我已经下载了 260 000 个图像文件,如下所示:
filename.jpg?
filename2.jpg?
filename3.jpg?
我如何轻松重命名/删除有问题的“?”从文件扩展名?
我尝试过各种 osx 软件包
Finder
A better Finder Rename 11
Name Mangler
Renamer
vRenamer
...但他们都无法完成这项工作
-most packages cannot seem to access the '?' in the file exenstion
-Name Mangler can suucesfuly append and extra ".jpg" to file, giving me filename3.jpg?.jpg
i could work with this, but it also can only do 5000 files at a time, which means 50 batches :-/
它需要一个高效的终端命令;非常感谢任何提示!
谢谢
马修
答案1
您可以使用参数扩展和bash
。
下面的脚本将删除?
文件名中的所有内容,因此如果您有的话,file?name.jpg?
它将被替换为filename.jpg
:
#!/bin/bash
for file in ./*; do
mv "file" "${file//\?/}"
done
或一行脚本:
for file in ./*; do mv "$file" "${file//\?/}" ; done
如果您只想删除最后一个字符(即?
),您可以使用:
#!/bin/bash
for file in ./*; do
mv "$file" "${file%?}"
done
或一行脚本:
for file in ./*; do mv "$file" "${file%?}" ; done
笔记:您应该被放置在您拥有文件的目录中,或者您可以替换for file in ./*
为for file in /path/to/your_working_directory/*
.
使用重命名
您可以使用命令轻松重命名文件rename
。我发现在 macOS 中可能无法安装,因此您应该安装:
brew install rename
我不太确定这个命令是否适用于 macOS。我在 Linux 上进行了测试file-rename
,据我所知,两者是相同的。如果我错了,请现在告诉我。
该脚本将删除?
每个文件名末尾的 :
rename 's/\?$//' *
#or
rename 's/\?$//' /path/to/your_working_directory/*
这将删除所有?
文件名:
rename 's/\?//g' *
#or
rename 's/\?//g' /path/to/your_working_directory/*