如何删除“?”之后的所有字符(包括“?”)在文件名中?

如何删除“?”之后的所有字符(包括“?”)在文件名中?

我下载了大量文件,最终在我想删除的文件名中添加了看起来像身份验证参数的文件。例子:

file1.doc?b1h2uj3b123uiyb12
file2.xls?oi12jo3ij123oij
file3.jpg?0990xcizx0cxzczixuchbiasdu

有没有一种简单的方法可以让我删除整个文件文件夹中问号后的所有内容?

答案1

您可以使用 匹配所有带问号的文件名,并使用 从变量中*\?*删除 后面的部分。问号本身是通配符,因此在两种情况下都必须转义。?${var%%\?*}

对文件进行简单的循环并运行mv应该可以:

for f in ./*\?*; do
    echo mv -n "$f" "${f%%\?*}"
done

(它的echo存在是为了让您可以看到在进行任何更改之前会执行什么操作。如果输出看起来合理,请将其删除。)

答案2

使用 Perlrename实用程序:

$ rename -v -n 's/[?].*//' *[?]*
rename(file1.doc?b1h2uj3b123uiyb12, file1.doc)
rename(file2.xls?oi12jo3ij123oij, file2.xls)
rename(file3.jpg?0990xcizx0cxzczixuchbiasdu, file3.jpg)

这会将 Perl 替换s/[?].*//应用于每个名称。这会截断第一个问号之前的名称。文件*[?]*名通配模式将扩展到当前目录中包含问号的任何名称。

运行命令而不-n实际重命名文件。

相关内容