如何将文件名中的一个字符替换为另一个字符

如何将文件名中的一个字符替换为另一个字符

我在 Debian 9 系统上有一个带有子文件夹的文件夹,其中有很多?名称中带有某个字符的文件。我想重命名然后将其更改?_.例如,A?oranza.txt-> A_oranza.txt

我尝试了很多在这个网站上找到的命令,但没有成功。

答案1

再次阅读您的问题/答案/评论后,您确实应该尝试一下detox

因为,试图弄清楚背后的内容?(仅控制台表示)可能非常乏味。

detox将轻松清理您的文件名。

答案2

您可以使用以下循环替换所有?内容_

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

我想我终于弄清楚并测试了它。我提取了所有带有控制字符和非 ASCII 字符的文件,并在第二个循环中将非 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现在我有了正确的文件名。感谢所有发布答案的人!

相关内容