2015-07-10 33 views
1

我得到了100个需要从.JPG重命名为.jpg的图像。我已经写了一个吞咽任务,并将它们全部重命名。现在Git没有认识到这种变化。Git将大量文件(图像)更改为小写

我发现这对单个文件: I change the capitalization of a directory and Git doesn't seem to pick up on it

但我不想这样做是通过手中的每个图像上是有可能使用某事物这样

git mv **/*/.JPG **/*.temp

git mv **/*/.temp **/*.jpg

的图像都在差异。文件夹!例如。 src/a, src/a/b src/b ...

回答

1

这工作:

for file in $(git ls-files '*.JPG'); 
do git mv -f $file $(echo $file |sed 's/\.JPG/\.jpg/'); done 
  • git ls-files列出所有文件=>'*.JPG'滤波器
  • git mv -f移动文件(-f =力,这是必需的)
  • $file返回原文件名
  • $(echo $file |sed 's/\.JPG/\.jpg/') is t他新的文件名

帮助主题:

git rename many files and folders

How to rename large number of files

+0

shell将执行简单的字符串工作,'mv -f“$ file”“$ {file%。 JPG} .jpg“'而不是'echo' +'sed'。 – jthill

1
for line in $(find -type f -name '*.JPG' 
       | sed '[email protected]\(.*\)\[email protected]\1.JPG \1.jpg/') 
do 
    git mv $line 
done 

如果你已经改名为你的文件,你只需要git add他们。 由于他们没有改变git会注意到他们都有相同的blob 对象和setup the renaming。如果你没有使用Git的工作目录其他任何不明或 更改的文件,一种可能的方式是:

for path in $(git status --porcelain | sed 's/.. //') 
do 
    git add "$l" 
done 
+0

我已经给他们改名。所以我想我必须使用第二种解决方案。你能解释一点吗?当我在git repo上做疯狂动作时,我总是很害怕。 –

+0

只要你有一个以前回购状态的克隆,你就不必害怕。 – jvdm

+0

关于操作,你只是告诉git一些文件应该被标记为删除和添加:git足够聪明以知道它们确实是同一个文件,然后将它们标记为“文件移动”(重命名)。 – jvdm

1

有一个小的变化由@jvdm给出的答案,使第一个代码片断工作。

for line in $(find -type f -name '*.JPG' 
       | sed '[email protected]\(.*\)\[email protected]\1.JPG \1.jpg/') 
do 
    git mv $line 
done 
+0

这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 –

+0

好吧......知道了..谢谢你让我知道。 – vchethan

+0

不幸的是,这也不起作用: 'find:illegal option - t usage:find [-H | -L | -P] [-EXDSx] [-f路径]路径...[expression] find [-H | -L | -P] [-EXdsx] -f路径[路径...] [表达式] -bash:命令替换:第2行:意外标记附近的语法错误\'|' -bash:命令替换:第2行:\'| sed的@ \(。* \)\ .JPG @ \ 1.JPG \ 1.jpg /'' ' –