在bash shell中使用rename命令重命名文件

问题描述 投票:1回答:1

我在论坛上读过其他类似的问题,我无法理解为什么我试过的命令不起作用。

我有一个以aaaa_100_aaaa.csv,aaaa_100_aaab.csv,aaaa_100_aaac.csv等形式命名的文件列表,我希望将“100”替换为“200”。

我在Windows PowerShell WSL中运行bash。我试过这个命令

 rename 's/420/410/g' *.csv

我在论坛上的许多答案中找到了相同的表达,但它不起作用。我收到了错误消息

mv: target 'aaaa_100_aaaa.csv' is not a directory.
bash scripting rename file-rename
1个回答
0
投票

鉴于错误消息以mv:开头,因此显然是由mv(“move”)命令生成的,我愿意打赌你的bash已被配置为将rename视为mv的替代名称。所以你根本就没有运行rename命令。

要检查这一点,请运行type rename。它可能会告诉你rename是别名或shell函数,而不是你期望的/usr/bin/rename可执行文件的引用。

您可以使用完整路径名来调用rename来解决这个问题:

    /usr/bin/rename 's/100/200/g' *.csv

或者通过在rename前写一个反斜杠来告诉bash跳过对命令名的任何特殊处理:

    \rename 's/100/200/g' *.csv

当然,如果你想要经常使用真正的rename那么记住每次都会这样做会很烦人。你可以unalias rename,但只能在当前的shell中修复它。

长期解决方案是防止bashrename作为捷径。要做到这一点,首先必须找出定义别名或函数的位置,然后删除该定义。它可能在你的$HOME/.bashrc$HOME/.bash_profile文件中。如果它不存在那么像grep rename $HOME/.*这样的东西应该找到它。如果没有找到它,那么它可能是你不能(或不想)编辑的系统启动文件,在这种情况下你可以通过将unalias rename添加到你的.bashrc.bash_profile来摆脱它。

© www.soinside.com 2019 - 2024. All rights reserved.