エラー。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

入出力エラーが発生するディレクトリを削除する代わりに、他のディレクトリごとにコマンドを 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' {} \;

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

関連情報