在 bash shell 中使用重命名命令重命名文件
Posted
技术标签:
【中文标题】在 bash shell 中使用重命名命令重命名文件【英文标题】:Rename files using rename command in bash shell 【发布时间】:2019-09-02 06:47:10 【问题描述】:我在论坛上阅读了其他类似的问题,但我无法理解为什么我尝试的命令不起作用。
我有一个以 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.
【问题讨论】:
如果您有来自util-linux
包的rename
,则不支持s/find/replace/
。使用man 1 rename
检查您的rename
版本。如果在AVAILABILITY
下,它表示它是util-linux
包的一部分——你有你的答案。
【参考方案1】:
鉴于错误消息以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 中修复它。
长期的解决方案是防止bash
将rename
视为捷径。为此,您首先必须找出定义别名或函数的位置,然后删除该定义。它可能在您的$HOME/.bashrc
或$HOME/.bash_profile
文件中。如果它不存在,那么 grep rename $HOME/.*
之类的东西应该会找到它。如果没有找到它,那么它可能位于您无法(或不想)编辑的系统启动文件中,在这种情况下,您可以通过将 unalias rename
添加到您的 @987654343 来摆脱它@ 或.bash_profile
。
【讨论】:
以上是关于在 bash shell 中使用重命名命令重命名文件的主要内容,如果未能解决你的问题,请参考以下文章