我在Web服务“GitHub”上创建了一个存储库,我通过浏览器的Web界面一个接一个地或成组地上传文件。文件被放置在不同嵌套深度的文件夹中。文件具有不同的扩展名。
现在我需要根据以下原则重命名存储库中的157个文件:
00-00_file-name.ext # before
00-000_file-name.ext # after, added '0'
字符串
这些是模板。可以有不同的扩展来代替.ext
,我使用.cpp
和.h
。file-name
可以具有不同的长度。除了00-00
,还可以有00-01
、00-02
、...、01-00
、01-01
、...、02-00
、02-01
、02-02
等等。也就是说,我需要在第二个数字(连字符-
之后)中输入三位数而不是两位数。
我知道how to rename文件通过网页界面一个接一个,但我不知道如何通过'GitHub'网页界面一次重命名许多文件。
我把仓库克隆到我的电脑上了。我写了一个PowerShell脚本来重命名157个文件,并在克隆的存储库中重命名了这些文件。之后,我创建了一个包含所有重命名的提交,并将更改发送到'GitHub'上的原始存储库。下面我将简要概述有关要点的细节。(我在‘Windows 10’操作系统上工作,我从命令行使用‘Git for Windows’程序。我使用PowerShell版本7作为shell。我使用“Windows终端”作为终端模拟器。)
1.将存储库克隆到我的计算机:
PS C:\Users\Илья\source\repos> git clone https://github.com/ilyachalov/learncpp-com-examples
型
1.用于重命名文件的PowerShell脚本(在文件rename-files.ps1
中,不带BOM的UTF-8编码,CRLF行尾):
Get-ChildItem -File -Recurse |
Rename-Item -NewName {
$_.Name -replace '^(\d\d)-(\d\d)_(.*)', '$1-0$2_$3'
}
型
我还写了一个脚本版本,它做同样的事情,但仍然向控制台输出有关重命名进度和最终结果的消息:
$total = 0
$renamed = 0
Get-ChildItem -File -Recurse |
Rename-Item -NewName {
$old = $_.Name
$new = $old -replace '^(\d\d)-(\d\d)_(.*)', '$1-0$2_$3'
$script:total++
if ($old -ne $new) {
Write-Host "$old --> $new"
$script:renamed++
} else {
Write-Host "$new"
}
$new
}
"Total files checked: $total, including renamed: $renamed"
型
开始重命名(在使用脚本之前,我把它放在目标文件夹中,它也会检查目标文件夹中的子文件夹;重命名后,目标文件夹中的脚本应该被删除,这样它就不会进入提交):
PS ..\repos\learncpp-com-examples\chapters> .\rename-files
型
1.创建一个commit:
PS ..\learncpp-com-examples> git add --all
型
据我所知,在这种情况下,git add --all
命令对每个文件执行git rm 'old-name-file'
和git add 'new-name-file'
,'Git'系统诊断文件重命名。(有一本书about it。
PS ..\learncpp-com-examples> git commit -m "Renaming a group of files (157)"
型
1.将更改发送到原始'GitHub'存储库:
PS C:\Users\Илья\source\repos\learncpp-com-examples> git push origin main
型
最后,我成功了,但我很好奇是否有更好的方法来做同样的事情。毕竟,我是“GitHub”的新手,可能不知道一些事情。
**我的问题。**GitHub是否有通过Web界面和其他界面处理组文件的工具?有没有可能编写一个脚本来重命名PowerShell中的文件,比我做的更优化?我无法使用git mv
命令,是否可以在此命令中使用正则表达式?在'GitHub'上重命名文件有哪些更方便的程序(工具)?
1条答案
按热度按时间xfb7svmp1#
我无法使用
git mv
命令,是否可以在此命令中使用正则表达式?我got a hint从用户的'Linux'系统如何使用正则表达式与
git mv
命令在这种情况下,即使它不支持他们.我在PowerShell中重写了建议的方法:字符串
运行此脚本后,您不需要使用
git add --all
命令形成索引,您可以立即使用git commit
命令创建提交。这在git mv
命令的documentation中说明。