重命名目录中的文件

重命名目录中的文件

我在一个目录中有文件。文件名是使用日期时间戳记法构造的,文件名的格式如下:

姓名_YYMM.csv

我想使用以下命名约定重命名所有此类文件:

名称_YYYYMM.csv

我不确定是否可以使用像 grep 这样的命令行实用程序来执行此操作,或者是否需要编写 bash 脚本来执行此操作。

如能得到有关如何解决该问题的任何帮助,我们将不胜感激。

我在 Ubuntu 上运行

答案1

一个非常简单的方法

ls name* | while read a; do mv $a `echo $a | sed s/name_/name_20/`; done

或者

ls name* | while read a; do mv $a $(echo $a | sed s/name_/name_20/); done

(因为反引号的使用不被重视(或者难以阅读))

它会列出所有匹配的文件,name_然后将找到的每个文件替换name_name_20。如果您正在处理上个千年的文件,则可以将 20 更改为 19。

答案2

rename您的系统上可能调用了一个程序或 Perl 脚本。

为了Perl 脚本版本:

rename 's/_/_20/' *_*.csv

为了util-linux-ng版本:

rename _ _20 *_*.csv

或者,使用 Bash:

for f in name*; do mv "$f" "${f/_/_20}"; done

答案3

在 zsh 中:

autoload zmv
zmv '(*_[0-9][0-9])([0-9][0-9].csv)' '${1}20${2}'

您可以使模式不太精确,例如'(*_??)(??.csv)',即使'(*)(??).csv'没有其他文件匹配的风险。

如果你不想使用 zsh,请参阅丹尼斯·威廉姆森的回答

相关内容