如何从文件名中删除问号和其余部分?

我已经使用wget 获取了整个网站模板。例如,它在不同的子目录中创建了许多资产文件,其中文件名包含问号./fonts/fontawesome-webfont.woff?v=4.5.0。我需要?从这些文件名中截断其余部分。我试过这个命令:

find . -type f -name '*?*' -exec mv "{}" "$(echo {} | sed 's/?.*//g')" ;

但它不起作用;没有替换/删除任何内容,它显示此错误:

mv: './fonts/fontawesome-webfont.woff?v=4.5.0' and './fonts/fontawesome-webfont.woff?v=4.5.0' are the same file

我在不同的目录中有这些类型的文件名,所以我尝试了find命令。我在这里错过了什么?

回答

这是一个防弹的。

find . -name '*?*' -type f -exec sh -c '
for fp; do
  fn=${fp##*/}
  echo mv "$fp" "${fp%/*}/${fn%%?*}"
done' sh {} +

上面的循环隔离了每个选定文件的名称(在变量 named 中fn),以便能够在不破坏任何内容的情况下删除最左边的问号和其余部分;如果我们这样做${fp%%?*},我们将无法处理名称中带有问号的目录的内容。不过,如果我们确定每个文件名只包含一个问号,那${fp%?*}就没问题了。

echo如果输出看起来不错,则删除。


以上是如何从文件名中删除问号和其余部分?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>