2011-08-22 27 views
2

我想寫一個bash腳本,將遞歸搜索目錄,找到具有相同名稱但不同情況下的文件,並重命名它們。BASH腳本來改變名稱相同的文件名稱,但不同的情況

例如含目錄和file.txt的file.txt的,file.txt的將保持和FILE.TXT將命名爲file.0(或任何數量,只要兩個副本將被保留。)

這裏是我有的代碼,但我看到了問題。要掃描重複名稱的行將更改文件路徑中的大小寫,使其無效。我想不出一種方法來檢測重複,而不刪除路徑中的情況。

#!/bin/bash 

#Scan for duplicates 
find $1 -name "*"| tr 'A-Z' 'a-z' | sort | uniq -d > ~/case.tmp 

#Count changes 
i=0 

#Make changes 
for line in `cat ~/case.tmp` 
    do mv $line $line.$i 
    let i++ 
    done 

#Print Results 
echo "$i file(s) renamed". 

感謝您的幫助。

回答

2

你有沒有嘗試類似

find $1 | sort -f | uniq -i -d -D 

說明:

  • sort -f:忽略大小寫
  • uniq -i -d -D:忽略大小寫(-i),打印重複的行(-d),打印所有重複行(-D)

從那裏它應該是eas Ÿ意識到你想要做什麼。

+0

謝謝,這使我可以檢測到重複的名稱附加一個數字,而不是重命名它們,這也會起作用。 – chris

相關問題