間違い。 Windows予約文字を使用してファイルとディレクトリの名前を変更する

間違い。 Windows予約文字を使用してファイルとディレクトリの名前を変更する

私のハードドライブがLinux Mintにマウントされていないため、問題を解決するには、Windowsに行き、chkdsk /f e:.chkdskを実行して問題を解決しましたが、すべてのファイルの名前を特殊文字に変更し、ファイルをディレクトリに移動しましたfound.000。これで、以前と同じようにファイルを移動して名前を変更する必要があります。特殊文字を含むファイルの名前を変更するコマンドを時々実行すると、これが再び発生するのを防ぐことができます。

再帰的にしたいファイルとディレクトリの名前変更現在のディレクトリから。これ改行文字交換する必要がありますスペースのために、これ数値 < > : " \ | ? *しなければならない削除済みまたは、予約されていない同様の文字に置き換える方が良いです。スペース存在する始まりと終わりファイル名は次のとおりです。削除済み。これは例です私が望むもの:

rename(' Fîlenämè\n\r\n$@<>:"\|?* \n ', 'Fîlenämè $@')

これは何ですか?またはより良い:

rename(' Fîlenämè\n\r\n$@<>:"\|?* \n ', 'Filename $@')

~によるとこの回答次のようにする必要があります。

LC_ALL=C find . -depth -execdir rename -n 's/[\r\n]+/ /g; s/:/./g; s/[\|]/-/g; s/[<>"?*]//g; s/[ \f\t\v]+$//g; s/^[ \f\t\v]+//g' {} +

..Trash-1000コマンドが私に提供するので、そのディレクトリを無視する必要があります。入出力エラーコマンドが動作を停止しました。そのディレクトリに名前を変更できるファイルがある場合は、これらのエラーを処理するスクリプトがあれば完璧です。

..Trash-1000次のようにディレクトリを整理するように指示されました。この回答。私も少し見ました。これ。しかし、これはうまくいきません。

LC_ALL=C find . -depth -path ./..Trash-1000 -prune -o -print -execdir rename -n 's/[\r\n]+/ /g; s/:/./g; s/[\|]/-/g; s/[<>"?*]//g; s/[ \f\t\v]+$//g; s/^[ \f\t\v]+//g' {} +

そして、ファイル名の始めと終わりにあるスペースはまだ削除されていません。

私の質問を質問に書き直す必要がありました。名前変更を使用してファイル名(ディレクトリを除く)の無効な文字を繰り返し変更するスクリプト私には答えがありません。

答え1

入力/出力エラーが発生するディレクトリをクリーンアップする代わりに、他のすべてのディレクトリに対してコマンドを一度実行することもできます。

以下は、Windows予約文字を削除するために使用するコマンドです。

find . -execdir rename -n 's/[\r\n]+/ /g;
                           s/:/./g;
                           s/[\|]/-/g;
                           s/[<>"?*]//g;
                           s/[ \f\t\v]+$//g;
                           s/^[ \f\t\v]+//g' {} \;

改行文字をスペースに変換し、変更に置き換えて削除し、ファイル名の末尾のスペースを削除してから、先頭のスペース:にも同じことを行います。.\|-<>"?*

関連情報