異なるディレクトリにある複数のファイルの名前を変更する

異なるディレクトリにある複数のファイルの名前を変更する

私はDSM 6.1 +がインストールされているSynology NASサーバーに約5TBのデータを保存するので、bashはそのシステムで動作する必要があります。問題は、現在このデータをNTFS形式の外付けハードドライブに保存していることです。最大の問題は、アーカイブプロセス中にいくつかのファイルの競合があるようですが、Linuxは大文字と小文字を区別しますが、Windowsではそうではありません。たとえば、

テスト.txt

テスト.txt

Linuxでは2つの別々のファイルですが、Windowsではそれを1つのファイルとして扱います。

問題は、過去に使用したツールを使用してどのファイルがクラッシュしているのかを知ることができるはずですが、手動で名前を変更するにはファイルが多すぎます。ファイルは、3〜4つのディレクトリの下に複数のディレクトリに分散されています。実際に競合があるすべてのファイルが見つかった場合は、ファイル名を変更する最も簡単な方法は何ですか?

現在の場所から移動しない限り、命名は実際には重要ではありません。過去には、これらの衝突のいくつかの最後に「1」を追加しましたが、前述したように、今回は何百もの衝突があります。

これらのファイルの競合を見つけるための推奨ツールはありますか?

ベストアンサー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

.という2番目のファイルがあるためです../c/modern-approach/TEST

おすすめ記事