批重命名regex不起作用的文件
我在linux服务器上有很多文件都是这种格式的批重命名regex不起作用的文件,regex,linux,Regex,Linux,我在linux服务器上有很多文件都是这种格式的 text\u text\u mixture lettersnumbers.file例如Hesperocyparis\u goveniana\u E00196073A.bam.bai或Hesperocyparis\u forbesii\u RBGEH19\u bwa\u out.txt。我想将第一个下划线改为连字符,并保留所有其他内容,使其看起来像text-text\u mixturelettersnumbers.file 我尝试了rename-n'
text\u text\u mixture lettersnumbers.file
例如Hesperocyparis\u goveniana\u E00196073A.bam.bai
或Hesperocyparis\u forbesii\u RBGEH19\u bwa\u out.txt
。我想将第一个下划线改为连字符,并保留所有其他内容,使其看起来像text-text\u mixturelettersnumbers.file
我尝试了rename-n's/(\w+)(\w+)/$1-$2/'*
和许多不同的版本,但什么都没有发生。有人能指出我做错了什么吗
谢谢
Markus没有仅显示结果的选项。这是非常基本的
如果要列出扩展名前包含两个下划线的文件,请使用
for f in *_*_*.*; do
echo "$f => ${f/_/-}";
done
要实际重命名,请使用mv
:
for f in *_*_*.*; do
mv -- "$f" "${f/_/-}";
done
“${f//-}”
将变量f
中的第一个-
替换为-
。此命令运行良好。有两个工具名为重命名
,一个来自util linux,另一个用Perl编写。您的语法看起来像util linux,但请检查rename--version
以确保。@Thomas给定s///
我猜是perl语法。@jhnc嗯,是的,绝对正确,不确定我在想什么。perl版本:rename s/-/?*\u*
;util linux版本:重命名-?*****
。请注意,-n
表示“不做任何事情”…当我将上述命令与echo一起使用时,它会完全按照我的要求执行。但是,当我想用mv
执行它时,我得到以下错误mv:xantocyparis\u vietnamensis\u E00160382A.fasta=>xantocyparis-vietnamensis\u E00160382A.fasta'之后缺少目标文件操作数
。当所有文件都已位于目标文件夹中时,我必须在何处插入目标文件夹?@Markus不知道问题是什么,我知道当文件以连字符开头时可能会出现问题,因此我在mv
之后添加了--
。请确保键入的命令正确,并且在命令和参数之间有规则的(非硬/软)空格。感谢您指出这一点。添加--
产生了所有的不同。我首先复制并粘贴了echo
命令以查看发生了什么,然后将echo
替换为mv
,但没有注意到它后面还有--
。。。