文件名中包含多个“.”的 mv 文件

文件名中包含多个“.”的 mv 文件

我收到了一些文件,其名称如下(太多了,每天都需要手动执行此操作):

AA.B.txt
WW.C.txt

并且我想将它们重命名为AA_B.txt和 ,WW_C.txt以便现有 SQL 代码仍能按预期运行。目前,由于 filename.letter.txt 格式,这些文件被忽略。

ls可以工作并向我显示这些文件:

$ ls -a *.*.txt
AA.B.txt*
ABR.A.txt*
ABR.B.txt*
ABR.C.txt*
ACT.A.txt*

然而类似的mv命令失败:

$ mv *.*.txt *_*.txt
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory

我怎样才能将我已有的模式与我想要的模式相匹配?

答案1

mv不是合适的工具。

您应该使用以下rename命令:

rename 's/\./_/' *.*.txt

该字符串的's/\./_/'意思是“替换第一的在下列文件列表中出现了.带有“”的文件。_

答案2

mv 命令只能有一个目标,要么重命名一个文件(例如 mv AA.B.txt AA_B.txt),要么将一组文件和目录移动到一个目录中(例如 mv。TXT新目录)。如果要重命名文件,则需要一次重命名一个文件。因此,需要某种循环。

尝试如下操作:

for f in *.*.txt; do
    mv ${f} $(echo ${f} | sed -e 's#\.#_#')
done

sed 命令仅将找到的第一个点替换为下划线。其余的点保持不变。

希望这可以帮助。

相关内容