ファイル名のある文字を別の文字に置き換える方法

ファイル名のある文字を別の文字に置き換える方法

?Debian 9システムには、名前に特定の文字を含む多くのファイルを含むサブフォルダがあるフォルダがあります。名前を変更してから->?に変更したいと思います_A?oranza.txtA_oranza.txt

私はこのサイトの多くのコマンドを試しましたが、成功しませんでした。

答え1

あなたの質問/回答/コメントをもう一度読んだ後、実際に試してみてくださいdetox

?なぜなら、後ろで何が起こっているのか(コンソール表現のみ)把握するのはかなり退屈であるからです。

detoxファイル名を簡単に整理します。

答え2

次のループを使用して?すべてを変更できます_

for i in *
do
    echo "$i" | grep -q '?' && mv "$i" "${i//\?/_}"
done

いよいよ調べてテストしたと思います。制御文字と非ASCII文字を含むすべてのファイルを抽出し、2番目のループでは非ASCII文字を_

files=$(for i in *
        do
            echo "$i" | LANG="" sed -n '/[\x00-\x20]/p
                                        /[\x80-\xFF]/p'
        done)
for i in $files
do
    mv "$i" "$(echo "$i" | LANG="" sed 's/[\x00-\x20]/_/g
                                       s/[\x80-\xFF]/_/g')"
done

答え3

rsyncを介してWindowsコンピュータのバックアップをリセットする正しい方法を見つけて、問題に対する新しい解決策を見つけました。 @Kusalanandaと@HaukeLagingが言ったところのように?実際には?ではなく印刷されない特殊文字です。rsyncパラメータを使用してフォルダのコピーを作成し、結果--iconv=iso-8859-1,utf8フォルダの名前に正しい記号または特殊文字(たとえば、ñまたはá)が含まれています。

detoxまた、うまくいきましたが、rsync --iconv=iso-8859-1,utf8正しいファイル名を持つようになりました。回答を投稿した皆さんに感謝します!

関連情報