Git:一次重命名或移动所有文件

时间:2012-02-05 18:43:17

标签: git

我想将我的Git项目中的所有erb文件重命名为haml。(例如index.html.erb到index.html.haml)

如果我重命名每个文件,我必须输入以下命令超过三十次。

$ git mv app/views/pages/index.html.erb app/views/pages/index.html.haml

我尝试了下面的命令,但它没有用。

$ git mv app/views/**/*.erb app/views/**/*.haml

usage: git mv [options] <source>... <destination>

    -n, --dry-run         dry run
    -f, --force           force move/rename even if target exists
    -k                    skip move/rename errors

如何立即重命名?

6 个答案:

答案 0 :(得分:27)

for i in $(find . -iname "*.erb"); do
    git mv "$i" "$(echo $i | rev | cut -d '.' -f 2- | rev).haml";
done

对于每个.erb文件,git mv它自身,扩展名“.erb”替换为“.haml”。

答案 1 :(得分:1)

一个使用powershell的衬垫

Dir *.erb -Recurse | foreach { git mv $_.FullName $_.FullName.replace("erb", "haml")}

答案 2 :(得分:1)

这对我使用Powershell有用:

Get-ChildItem -File | foreach { git mv ($_.BaseName+".js") ($_.BaseName+".ts") }

为了安全起见,我选择不添加-Recurse。

使用任何所需的文件扩展名替换。

答案 3 :(得分:0)

在Windows中,您需要2个批处理文件。 1我们将生成,另一个是固定的。

以下示例git将所有* .js递归重命名为* .ts 假设:filename没有空格。

第1步:修复文件 git-rn.bat

@echo off
set _srcfile=%1
set _tgtfile=%_srcfile:.js=.ts%
git mv %_srcfile% %_tgtfile%

将其保存在 git-rn-all.bat

所在的同一地点/目录

步骤2:使用命令生成文件 git-rn-all.bat

  

cd'C:\ projects \ some-git-project \ src \ client \ app'   dir / a / s / b * .js&gt; GIT-RN-all.bat

第3步:根据我们的需要修改 git-rn-all.bat

修改 git-rn-all.bat 和文本替换所有公共基本路径以添加对 git-rn.bat 的调用。任何文本编辑器都可以轻松实现。

示例:

  

C:\项目\一些-git的项目\ SRC \客户\应用\ app.module.js

变为

  

调用git-rn.bat C:\ projects \ some-git-project \ src \ client \ app \ app.module.js

第4步:执行 git-rn-all.bat

你会看到相当大的输出

步骤5:删除批处理文件

删除 git-rn-all.bat git-rn.bat 您可能不再需要它们了。

答案 4 :(得分:0)

除了@Borealid的答案,它可能更简单:

for i in $(find . -iname "*.[old-extension]"); do
  git mv "$i" "${i/[old-extension]/[new-extension]}";
done

[old-extension][new-extension]应该替换为真实扩展名。

斜杠(/)是字符串中的bash syntax替换。

答案 5 :(得分:0)

虽然这并不是确切问题的答案,但它仍然与该问题标题匹配,因此我认为它可能会为像我这样的人提供帮助,他们来到这里谷歌搜索以通过在文件扩展名前添加后缀来执行git重命名(对我有用):

for i in *.<file extension>
do
    git mv -v "${i}" "${i%.*}_SUFFIX.${i##*.}"
done
  • <file extension>应该替换为您所需的类型,例如C(用于C文件)
  • _SUFFIX应该用文件类型前的后缀替换
  • 如果您不使用git而仅使用Linux bash,只需从命令中删除git