前言
笔者在使用jekyll生成网页时,需要把每个md文档的前面加上形如"2023-12-26-"的前缀,那么如何批量地修改文件名呢?
linux
在文件所在的目录打开终端,输入以下命令:
for file in *.md; do mv "$file" "$(date +'%Y-%m-%d')-$file"; done
这个命令会遍历当前目录下的所有.md
文件,将它们的文件名改为当前日期加-再加原文件名。日期格式可以根据需要进行调整。
解释以下命令:
-
for file in *.md; do ...; done
:for file in *.md
:这是一个循环语句,它遍历当前目录下所有以.md
结尾的文件,并将每个文件的文件名赋值给变量file
。
-
mv "$file" "$(date +'%Y-%m-%d')_$file"
:mv "$file"
:这是移动命令(mv
),用于重命名文件。"$file"
表示当前循环的文件名。"$(date +'%Y-%m-%d')_$file"
:这是新的文件名。$(date +'%Y-%m-%d')
用于获取当前日期,并使用'%Y-%m-%d'
格式指定日期的显示方式。然后使用-连接日期和原文件名,这就是新的文件名。
在 Bash 中,变量在赋值和引用时有不同的语法。当你赋值给变量时,使用 =
符号,例如 file=example.md
。当你引用变量时,使用 $
符号来获取该变量的值,例如 echo $file
。
将 $file
放在双引号中的原因是为了处理文件名中可能包含空格等特殊字符的情况。如果文件名中有空格,而没有使用双引号括起来,Bash 会将空格解释为分隔符,导致命令无法正确执行。
例如,假设有一个文件名为 “my file.md”,如果不使用双引号,命令会被解释为 mv my file.md
,而这样会导致错误。通过使用双引号,Bash 可以正确地将整个文件名作为单个参数传递给 mv
命令。
date +'%Y-%m-%d'
是 Linux 系统中用于获取当前日期的命令。这个命令以指定的日期格式输出当前日期。
解释一下日期格式中的部分:
%Y
表示年份的四位数。%m
表示月份的两位数。%d
表示日期的两位数。
windows
在 Windows 环境下,你可以使用 PowerShell 脚本来实现类似的批量文件重命名操作。下面是一个示例 PowerShell 脚本,用于在文件名前面添加当前日期:
Get-ChildItem *.md | ForEach-Object {
$newName = (Get-Date).ToString('yyyy-MM-dd') + '-' + $_.Name
Rename-Item $_.FullName $newName }
这个脚本的作用是遍历当前目录下的所有 .md
文件,然后为每个文件生成一个新的文件名,其中包含当前日期,并使用 Rename-Item
命令将文件重命名为新的文件名。
在 PowerShell 中,$_
表示管道中当前对象的变量。在这个脚本中,$_
指代了 Get-ChildItem
返回的每个文件对象。