Removing unknown / non-specific string after file extension on file names
尝试一次删除多个文件上文件扩展名后的字符串。我不知道文件将在哪里,只是它们将驻留在我所在的子文件夹中。
需要删除最后一个字符串,即文件扩展名之后的所有内容。文件名是:
something-unknown.js?ver = 12234 ....(最后一位也是未知的)
我在此线程中发现的这个(以下):
1 2 3 4 5 | for nam in *sqlite3_done do newname=${nam%_done} mv $nam $newname done |
我知道我必须使用%从末尾删除该位,但是当我已经将其用作"对于任何文件"选择器时,如何在最后一位中使用通配符?
尝试过修改上面的内容:
1 2 3 4 5 | for nam in *.js* do newname=${ nam .js% } // removing all after .js mv $nam $newname done |
我在MacOS Yosemite中,得到了bashshell并进行了镇静处理。知道重命名和sed,但是我只看到了带有特定字符串的主题,除了以下内容,没有针对此问题的通配符:
如何在bash中使用通配符重命名文件?
https://unix.stackexchange.com/questions/227640/rename-first-part-of-multiple-files-with-mv
我认为这是您在参数替换方面要寻找的:
1 2 3 4 5 6 7 8 9 | $ 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 |
请注意,我们将
重命名文件将类似于:
1 2 3 4 | $ 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程序脚本执行该文件。
如果需要将其完全自动化,则可以删除回波并直接执行
1 | for x in $(find . -type f -name '*.js*');do mv $x $(echo $x | sed 's/\\.js.*/.js/'); done |