shell 脚本中的批量重命名
Mass rename in shell script
我有一堆这种格式的文件:
blabla.log.YYYY.MM.DD
其中 YYYY.MM.DD
类似于 (2016.01.18
)
我有很多文件夹,每个文件夹大约有 1000 个文件,所以我想有一个简单的脚本来重命名它们。我想将它们重命名为
blabla.log
所以基本上,我只是去掉最后的日期。这是我拥有的:
for f in [a-zA-Z]*.log.[0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9]; do
mv -v $f ${f#[0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9]};
done
这个脚本输出这个:
mv: `blabla.log.2016.01.18' and `blabla.log.2016.01.18' are the same file
更多信息:
- 我在 windows,但是我 运行 这个脚本在 gitbash
- 出于某种原因,我的 gitbash 无法识别 "rename" 命令
- 一些正则表达式模式(例如
[0-9]{4}
似乎不起作用)
我真的很迷茫。谢谢。
编辑:我需要重命名末尾有日期且来自以下文件的每个文件:*.log.2016.01.18。他们都需要保留原来的名字。所有应该改变的是删除日期。
你必须使用 %
而不是 #
:你想从字符串的结尾而不是开头删除。
此外,您在必须删除的内容中遗漏了一个 .
,您不希望以 blabla.log.
结束。
引用变量名可以防止文件名包含特殊字符时出现意外情况。
在一起:
mv -v "$f" "${f%.[0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9]}"
我有一堆这种格式的文件:
blabla.log.YYYY.MM.DD
其中 YYYY.MM.DD
类似于 (2016.01.18
)
我有很多文件夹,每个文件夹大约有 1000 个文件,所以我想有一个简单的脚本来重命名它们。我想将它们重命名为
blabla.log
所以基本上,我只是去掉最后的日期。这是我拥有的:
for f in [a-zA-Z]*.log.[0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9]; do
mv -v $f ${f#[0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9]};
done
这个脚本输出这个:
mv: `blabla.log.2016.01.18' and `blabla.log.2016.01.18' are the same file
更多信息:
- 我在 windows,但是我 运行 这个脚本在 gitbash
- 出于某种原因,我的 gitbash 无法识别 "rename" 命令
- 一些正则表达式模式(例如
[0-9]{4}
似乎不起作用)
我真的很迷茫。谢谢。
编辑:我需要重命名末尾有日期且来自以下文件的每个文件:*.log.2016.01.18。他们都需要保留原来的名字。所有应该改变的是删除日期。
你必须使用 %
而不是 #
:你想从字符串的结尾而不是开头删除。
此外,您在必须删除的内容中遗漏了一个 .
,您不希望以 blabla.log.
结束。
引用变量名可以防止文件名包含特殊字符时出现意外情况。
在一起:
mv -v "$f" "${f%.[0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9]}"