如何从文件扩展名中删除查询参数?

如何从文件扩展名中删除查询参数?

如何从文件扩展名中删除查询参数

我已经下载了 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/* 

相关内容