用shell命令对文件重命名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用shell命令对文件重命名相关的知识,希望对你有一定的参考价值。

参考技术A shell脚本实现文件改名小操作, 在此做一记录.
#!/bin/bash#将数据文件.SAC名改为'<sta>.[N/E/Z].SAC'#例如2014.143.20.49.21.0000.YN.BAS.00.BHE.M.SAC改为BAS.E.SACcd ../Datafor FILE in ./* do cd ./$FILE ls#先ls,显示给文件下的所有文件名,对这些文件名使用awk命令,print出相应的mv *** *** 交由bash处理,给文件重命名.ls *.SAC | awk -F"." 'print "mv "$0" "$8"."$10"."$12' | bash rename "s/BH//" * #将BH替换为"",即删除BH# rename 's/^/filt./' *.SAC #增加前缀"filt."# rename 's/filt.//' * #删除前缀"filt." cd .. done

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

【中文标题】在 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 中修复它。

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

【讨论】:

以上是关于用shell命令对文件重命名的主要内容,如果未能解决你的问题,请参考以下文章

linux下怎么批量重命名这些文件

linux 下对文件重命名

linux 下对文件重命名

sh 重命名shell中的链接文件对。通过多对链接文件名重命名。

用bat文件重命名一个文件的命令怎么写?

linux中如何用rename命令重命名一个文件