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

时间:2019-04-11 15:08:11

标签: bash scripting rename file-rename

我已经在论坛上阅读了其他类似的问题,但我不明白为什么我尝试的命令不起作用。

我有一个以aaaaa_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.

1 个答案:

答案 0 :(得分:0)

鉴于错误消息以mv:开头,因此显然是由mv(“移动”)命令产生的,我敢打赌,您的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,但是只能在当前外壳中修复它。

长期解决方案是防止bashrename为捷径。为此,您首先必须找出别名或函数的定义位置,然后删除该定义。它可能在您的$HOME/.bashrc$HOME/.bash_profile文件中。如果不存在,则应该找到类似grep rename $HOME/.*的东西。如果找不到该文件,则它可能在系统启动文件中,您无法(或不想)对其进行编辑,在这种情况下,可以通过将unalias rename添加到您的文件中来摆脱它.bashrc.bash_profile