Linux
重命名不同目錄中的多個文件
我在 DSM 為 6.1+ 的 Synology NAS 伺服器上儲存了大約 5TB 的數據,因此 bash 應該可以在這些系統上使用。問題是我們目前正在將此數據存檔到為 NTFS 格式化的外部硬碟驅動器。主要問題是在歸檔過程中似乎存在一些文件衝突,Linux 區分大小寫但 Windows 不區分。例如:
測試.txt
測試.txt
在 linux 中,這是兩個獨立的文件,但 Windows 會將它們視為一個文件。
手頭的問題是,我應該能夠使用我們過去使用的工具找出哪些文件是衝突的,但是文件太多,無法手動重命名它們。這些文件分佈在多個目錄中,向下 3 或 4 個目錄。如果我能夠找出所有實際上存在衝突的文件,那麼重命名這些文件的最簡單方法是什麼?
只要他們不從目前位置移動,命名真的無關緊要。過去我只是在其中一些衝突的末尾添加了一個“1”,但就像我說的那樣,這次有數百個衝突。
有沒有推薦的工具來查找這樣的文件衝突?
您可以使用 獲取目前文件夾和子文件夾中所有文件的列表
find . | sort -f
。排序將忽略大小寫,以便具有相同名稱(忽略大小寫)的文件彼此相鄰,例如:./folder/dir/something/test ./folder/dir/something/TEST
這應該被傳遞給一個腳本,例如 Python,它可以檢查每一行與下一個/上一個,如果有匹配,你可以重命名文件,添加底層儲存,或者其他東西。我想這應該不會太難解決。
編輯:
#!/usr/bin/env python3 import sys if __name__ == "__main__": old_line = "" cur_line = "" for line in sys.stdin: old_line = cur_line cur_line = line if old_line.lower() == cur_line.lower(): print("Duplicate found!") print("File: {}".format(cur_line))
我這樣稱呼它:
find ../ | sort -f | ./rename_files.py Duplicate found! File: ../c/modern-approach/test
因為該目錄中有第二個文件名為
../c/modern-approach/TEST
.