我需要重命名一系列文件,这些文件中都包含模式“(*)”。例如;
001 (1).txt
002 (1).txt
003 (2).txt
我想要的输出是将文件重命名为001.txt,002.txt,003.txt。请注意,实际文件的长度和扩展名类型有所不同(这是我的测试批次)。
我已经搜索了网络和SE,并提出了以下内容,可以在终端中获得所需的输出。
ls *\(*\)* | sed 's/\(.*\)\( (.*)\)\(.*\)/mv & \1\3/'
mv 001 (1).txt 001.txt
mv 002 (1).txt 002.txt
mv 003 (2).txt 003.txt
但是,一旦我将其传递给sh,我就会收到以下错误。
sh: line 1: syntax error near unexpected token `('
sh: line 1: `mv 001 (1).txt 001.txt'
我知道这与本\( (.*)\)
节有关。我已经尝试过转义内部括号,但是那并没有给我想要的输出。我还搜索了正则表达式,说搜索空白后跟任意3个字符,但没有运气。
我知道有更简单的方法可以实现我想要的功能,但是到目前为止,我还是选择了sed,这是我唯一能模糊理解的事情。非常感谢您为使上述工作正常进行,然后考虑采用更简便的方法所付出的任何投入。
有一个重命名命令可以做到这一点,但我从未使用过。
您的脚本已关闭。试试这个:
ls -d -- *\(*\)* | sed 's/\(.*\) (.*)\(.*\)/mv -- "&" "\1\2"/'
请注意,'('是shell的特殊字符。将其放在双引号中会取消其特殊含义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句