2015-07-10 71 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 /'' ' –