web-dev-qa-db-ja.com

ファイル/フォルダーの名前を再帰的に変更して、名前をWindowsに適したものにする方法は?

私はUbuntuボックスにたくさんのファイルを持っていますが、それらのファイル名にはWindowsが受け入れないさまざまな文字が含まれています(ほとんどは「:」と「*」ですが、おそらく他の文字もあります)。

これらすべての名前を変更してWindowsマシンに移動する最も簡単な方法は何ですか?これらの文字を「[コロン]」や「[アスタリスク]」などに置き換えてもかまいません。

11
RomanSt

Glindraの名前変更 および デトックス を見てください。

Glindraファイルユーティリティは、WindowsまたはLinuxのいずれかにインストールできます。 Windowsでのファイル名のクリーンアップの例:

rena *.* -portable

rena *.* -safe
  • -安全
    先頭のダッシュ(ハイフン)をアンダースコアにマップします。
    スペースを折りたたむ。
    * ?: [] "<> |(){}などの問題のある文字をアンダースコアにマッピングします。
  • -ポータブル
    -safeと同じクリーンアップ操作を実行し、さらに次のことを実行します。
    ラテン1アルファベットの上半分からすべての8ビット文字を適切な7ビットフォールバック文字にマップします。
    一重引用符 '`´をアンダースコアにマップします。

出典: nix/Linux/POSIXファイル名の修正:制御文字(改行など)、先頭のダッシュ、およびその他の問題

Recuvaを試してください。

これは、Windowsに対応していないファイル名を処理する、私が見つけた唯一のWindowsユーティリティです。

有効削除されていないファイルのスキャン(破損または再フォーマットされたディスクからの回復用)を有効にして、フォルダーをスキャンします。復元時に、フォルダ構造の復元を有効にします。 Recuvaは、ディレクトリ全体を別の場所に効果的に「コピー」すると同時に、わかりにくいファイル名を「サニタイズ」します。

4
Steven

Linuxを使用せず、何もテストしなくても、以下のようなワンライナーを使用できると思います。

1文字を変更するには:

find . -type f -exec rename 's/:/\[colon\]/g' {} +
find . -type f -exec rename 's/\*/\[asterisk\]/g' {} +

そして最後に、英数字以外のすべての文字を削除します。

find . -type f -exec rename 's/[^A-Za-z0-9._]//g' {} +
1
harrymc

ファイルがすでにNTFSボリューム上にある場合は、Windowsからchkdskを実行すると問題が「解決」するようです。残念ながら、問題のあるファイルを削除することでそうしているようです。

0
Peltier

私は最初の2つの答えとpyRenamer(GUI)の組み合わせで管理しました。 Linuxでは、pyRenamerを使用して、フォルダー名(ディレクトリ)内のスペースを折りたたんで(スペースを何も置き換えずに)、他のプログラム(Glindraの名前変更)が再帰的に機能するようにしました(アンダースコアを付けることができます)。ファイルから、スペースを節約するためにいくつかのウィンドウで許容される文字または単語を取り出し、同様にファイル名のスペースを折りたたんだ。次に、renaを実行してWindows以外の文字を取り出し、フラッシュドライブに保存してから、Recuvaを使用してWindowsの下のフォルダーに「復元」しました。 Recuvaは、ファイルパスが長すぎるかどうかを示します(また、Windows以外の文字も削除します)。ファイル名のパスをチェックして、Windowsの最大制限である255(または、ある程度の余裕を持たせるために240)を下回っているかどうかを確認するツールはまだ見つかりません。

0
Vitex