Linux

重命名不同目錄中的多個文件

  • January 16, 2019

我在 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.

引用自:https://unix.stackexchange.com/questions/494904