数 TB のデータを含む NAS の一部である Linux ボリュームでは、一部のファイルが macOS から作成されており、macOS からアップロードされたファイルの一部には、FTP または SMB ファイル プロトコルでは再現できない文字がファイル名に含まれているようです。これらのファイルは次のように表示されます。 「写真名001.jpg」。ここで「」はおそらくコロンまたはスラッシュを表します。
「」を検索できます。そして、それがボリューム上の分散された場所にある 2171 個のファイルに適用されることがわかりました。各ファイル名を手動で見つけて修正するのは多すぎます。
SSH 経由で NAS に接続し、各ディレクトリをループして「」を自動的に置き換えることができると考えました。 「_」に変換しますが、これは次の理由で機能しません:
for file in **; do mv -- "$file" "${file///_}"; done
この試行ではエラーがスローされます。 と一致する最初の項目:
mv: can't rename '120422_LAXJFK': No such file or directory
したがって、この代替文字は明らかに「」として表示されます。これは、ボリューム インデックスに実際には存在しない名前を参照するため、ファイルまたはディレクトリをアドレス指定する方法ではありません。
(A) 「120422_LAX:JFK」が「120422_LAX:JFK」かどうかを確認するにはどうすればよいですか?または「120422_LAX/JFK」ここでの意味は、(B) これらの無効な文字をエスケープして、最終的にすべての名前を自動的にたとえば「120422_LAX_JFK」に変更できるようにするにはどうすればよいですか?
たとえば、名前から数値のファイル ID を取得し、ファイル名に「」が含まれている場合に番号でファイル名を変更するように指示する方法はありますか?
これらの「」は、システム上と NFS ドライブのファイル システム上で異なるテキスト エンコーディングが存在することが原因である可能性があります。したがって、基本的に何が起こるかというと、一部の文字がオーバーフローし、エンコードでその値を表現する方法がないため、文字が「」に置き換えられます。しかし、それらは確かに異なる文字であり、必ずしもすべてが「」であるわけではありません。したがって、値は異なります。
– ミスタージョープ
2020 年 9 月 4 日 16:32
これは無効な文字であることは理解していますが、ボリュームは EXT です。そもそも無効なファイル名のアップロードがどのようにして可能になったのか疑問ですが、それは今ここでの問題ではありません。問題は、すべてのディレクトリとファイルをループして、誤って「」と表示されるものを修正する方法です。
– 2x2p
2020 年 9 月 4 日 16:37
ファイル名が間違っているのでしょうか、それとも端末のエンコーディングが名前を正しく表示していないだけでしょうか? MacOS と Linux で $LANG を比較
– スターク
2020 年 9 月 4 日 19:43
------------------------
問題は、この「」の背後にあることだと思います。シンボルの異なるコードを使用できます。システムが一部の文字を表現できない場合 (たとえば、指定されたエンコーディングがサポートされていない場合)、その文字は自動的にデフォルトの文字 (この場合は「」) に置き換えられます。しかし、実際にはキャラクターのコードがあり、それが名前に含まれているはずです。しかし、**のファイルに対してこれを実行しようとすると、 do mv -- "$file" "${ファイル///_}";完了システムはコードを認識できません。その記号は「」です。はの略です。
この問題は、両方のデバイス (Mac と NAS) で文字のエンコーディングを変更することで解決できると思います (互換性があり、同じであることが望ましい)。
これが実現するといいのですが助けて
1
私の理解が正しければ、これらのファイルをアップロードしたシステムとプロトコルでのみ解決できるということですか?ディレクトリまたはファイル「120422_LAXJFK」をダウンロードすることさえできません。 FTP には「120422_LAXJFK」が表示されます。しかし、「そのようなファイルまたはディレクトリはありません」とも表示されます。ダウンロードしようとしたところ。サーバーは 2012 年から稼働しており、どのソフトウェアがこれらの問題の原因となったのかを過去に遡って追跡することはできません。
– 2x2p
2020 年 9 月 4 日 17:01