bash - 在文件名的文件扩展名之后删除未知/非特定字符串
问题描述
尝试一次在多个文件上删除位于文件扩展名之后的字符串。我不知道这些文件将在哪里,只是它们将驻留在我所在文件夹的子文件夹中。
需要删除最后一个字符串,文件扩展名之后的所有内容。文件名是:
something-unknown.js?ver=12234.... (最后一点也不知道)
我在这个线程中找到了这个(下) :
for nam in *sqlite3_done
do
newname=${nam%_done}
mv $nam $newname
done
我知道我必须使用 % 从末尾删除该位,但是当我已经将它作为“任何文件”选择器时,如何在最后一位中使用通配符?
已尝试对上述内容进行修改:
for nam in *.js*
do
newname=${ nam .js% } // removing all after .js
mv $nam $newname
done
我在 MacOS Yosemite 中,有 bash shell 和 sed。知道重命名和 sed,但我只看到带有特定字符串的主题,除了这些之外没有这个问题的通配符:
https://unix.stackexchange.com/questions/227640/rename-first-part-of-multiple-files-with-mv
解决方案
我认为这就是您在参数替换方面正在寻找的内容:
$ ls -C1
first-unknown.js?ver=111
second-unknown.js?ver=222
third-unknown.js?ver=333
$ for f in *.js\?ver=*; do echo ${f%\?*}; done
first-unknown.js
second-unknown.js
third-unknown.js
请注意,我们转义?
as\?
表示我们要匹配文字问号,将其与匹配任何单个字符的特殊 glob 符号区分开来。
重命名文件将类似于:
$ for f in *.js\?ver=*; do echo "mv $f ${f%\?*}"; done
mv first-unknown.js?ver=111 first-unknown.js
mv second-unknown.js?ver=222 second-unknown.js
mv third-unknown.js?ver=333 third-unknown.js
我个人喜欢输出命令,将其保存到文件中,验证它是我想要的,然后将文件作为 shell 脚本执行。
如果需要完全自动化,您可以删除回声并mv
直接执行。
推荐阅读
- angular - 错误:“未捕获(承诺中):错误:模块'LoginPageModule'导入的意外值'AlertController'。请添加@NgModule注释
- android - MFP8 中的直接更新甚至无法部署最新的 Web 资源
- sql - SQL Server: Using cursor to loop and insert incremental values
- c++ - 如何用双打专门化模板类?
- git - Resetting a new file in staging area to working directory in Git
- javascript - 如何在文本中捕获 alexa 的数据输出?
- authentication - 我想将时间表插件(用于 Jira)工作日志(每个 REST API)放入谷歌时间表,但我不断收到“需要 401 授权”
- excel - 使用vba删除excel文件的密码
- ruby-on-rails - Is it possible to access attribute that is delegated to another model?
- java - Spring boot application staring failed in IntelliJ