我已经在论坛上阅读了其他类似的问题,但我不明白为什么我尝试的命令不起作用。
我有一个以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.
答案 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
,但是只能在当前外壳中修复它。
长期解决方案是防止bash
视rename
为捷径。为此,您首先必须找出别名或函数的定义位置,然后删除该定义。它可能在您的$HOME/.bashrc
或$HOME/.bash_profile
文件中。如果不存在,则应该找到类似grep rename $HOME/.*
的东西。如果找不到该文件,则它可能在系统启动文件中,您无法(或不想)对其进行编辑,在这种情况下,可以通过将unalias rename
添加到您的文件中来摆脱它.bashrc
或.bash_profile
。