答案1
您可以通过对上一个问题的任一答案进行相当小的修改来做到这一点:
rename s/ras\.// sw.ras.*
或者
for file in sw.ras.*; do
mv "$file" "${file/ras./}"
done
解释:
rename
是一个perl
脚本,它采用perl
正则表达式和文件列表,依次将正则表达式应用于每个文件的名称,并将每个文件重命名为应用正则表达式的结果。在我们的例子中,ras
按字面意思匹配并\.
匹配文字.
(.
单独表示除换行符之外的任何字符),并且它什么也不替换。
该for
循环获取所有以sw.ras.
(standard shell glob) 开头的文件并循环遍历它们。${var/search/replace}
搜索第一个匹配项并将其替换为$var
,因此返回并删除第一个匹配项。因此,该命令将文件重命名为相同的名称 minus 。请注意,通过此搜索和替换,按字面意思理解,而不是作为特殊字符。search
replace
${file/ras./}
$file
ras.
ras.
.
答案2
另一种选择是使用 mmv(Mass MoVe 和重命名):
mmv '*ras.*' '#1#2'
不要忘记在模式周围使用单引号,否则星星将在 shell 级别扩展。
该实用程序并不总是可用,但如果不可用,您可以使用以下命令安装它:
sudo apt-get install mmv
请参阅手册页这里。
答案3
在任何符合 POSIX 标准的 shell(bash
、dash
、ksh
等)中:
for file in sw.ras.[[:digit:]][[:digit:]][[:digit:]]; do
mv "${file}" "${file/ras\./}"
done
或者与rename
:
rename 's/ras\.//' sw.ras.[[:digit:]][[:digit:]][[:digit:]]
答案4
使用 find、xargs 和 sed:
find -name 'sw.ras.*' -print0 | sed -ze "p;s/\.ras//" | xargs -0 -n2 mv