powershell 如何一次重命名GitHub存储库中的多个文件?

f87krz0w  于 2023-08-05  发布在  Shell
关注(0)|答案(1)|浏览(125)

我在Web服务“GitHub”上创建了一个存储库,我通过浏览器的Web界面一个接一个地或成组地上传文件。文件被放置在不同嵌套深度的文件夹中。文件具有不同的扩展名。
现在我需要根据以下原则重命名存储库中的157个文件:

00-00_file-name.ext   # before
00-000_file-name.ext  # after, added '0'

字符串
这些是模板。可以有不同的扩展来代替.ext,我使用.cpp.hfile-name可以具有不同的长度。除了00-00,还可以有00-0100-02、...、01-0001-01、...、02-0002-0102-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'上重命名文件有哪些更方便的程序(工具)?

xfb7svmp

xfb7svmp1#

我无法使用git mv命令,是否可以在此命令中使用正则表达式?
got a hint从用户的'Linux'系统如何使用正则表达式与git mv命令在这种情况下,即使它不支持他们.我在PowerShell中重写了建议的方法:

Get-ChildItem -File -Recurse |
    ForEach-Object {
        $old = $_.Name
        $new = $old -replace '^(\d\d)-(\d\d)_(.*)', '$1-0$2_$3'
        if ($old -ne $new) {
            $path = $_.DirectoryName
            Invoke-Expression "git mv $path\$old $path\$new"
        }
    }

字符串
运行此脚本后,您不需要使用git add --all命令形成索引,您可以立即使用git commit命令创建提交。这在git mv命令的documentation中说明。

相关问题