【问题标题】:Linux rename multiple files that are not in utf-8Linux重命名多个不在utf-8中的文件
【发布时间】:2013-12-05 12:09:55
【问题描述】:

我有旧的 samba 服务器文件,文件名中不显示 ä,ö,ü,õ 等特殊字符。它们显示为 ?标记。因此,我的客户无法打开这些文件或文件夹。他们看到文件和文件夹,但他们的名字是空白的。在服务器中它们显示如下:例如 T??tunnid.doc。

一旦我使用mv 命令重命名它们,我的客户就可以毫无问题地打开文件夹和文件。

有谁知道我可以用来重命名所有文件的脚本吗?在他们身上做记号。所以他们显示 - 相反。我想重命名特定文件夹中的文件,例如 /samba/documents/...

【问题讨论】:

  • 也许rename 可以帮忙?
  • 我已查看重命名。据我所知,它只查找和重命名特定的扩展文件。就像我想重命名 .doc 文件等一样。但是有文件夹、文档、图像等。所以如果名称包含?然后替换为 - (我知道这不是代码,所以只是举例。)
  • 我怀疑它是什么samba 问题。它类似于错误的mount 选项。检查您的fstab
  • 这不是 samba 的问题。这是旧服务器的编码。甚至 rsync 更改编码选项也不适用于他们。现在有超过 2000 个文件需要重命名,所以我不想手动重命名。

标签: linux bash character rename


【解决方案1】:

我检查了重命名命令,我认为它会起作用

rename "s/[^A-Za-z0-9-_]/_/g"

但是我怎样才能向它添加目录。所以它只检查那个目录而不是整个 ubuntu。

【讨论】:

    【解决方案2】:

    我不能 100% 确定这会起作用,所以我想要一些构象。

    find . -type d -name '*?*' -execdir rename '?' '_' {} \;
    

    【讨论】:

    • 这行不通。问号表示这个符号不能显示,很多符号可以这样显示。
    【解决方案3】:

    您可以尝试使用convmv 重命名文件以更改其字符编码。通常这个符号? 表示文件名和终端/文件系统/其他东西的不同编码。尝试确定您的文件使用哪种字符编码并像这样运行它:

    convmv -fcp1251 -tutf8 *
    

    您可以编写简单的脚本或只是 shell 循环来遍历目录并重命名所有需要的文件:

    find /full/path -execdir convmv --notest -fcp1251 -tutf8 {} \;
    

    但首先确保您使用正确的字符编码。

    【讨论】:

    • 如果我理解是正确的,它工作正常并且最近坏了。所以最近的行动有问题。
    • 它在旧服务器上运行正常。一旦我们接管了管理并用更好的服务器替换了服务器并重新同步了那些文件,它就搞砸了。
    • 它们的编码是二进制的:S
    • “二进制编码”是什么意思?我讲的是文件名,而不是文件本身。
    • 在从旧服务器抽取文件之前,您是否使用mount
    猜你喜欢
    • 2022-01-13
    • 2016-10-20
    • 2018-10-26
    • 2014-09-14
    • 2012-06-14
    • 2022-01-26
    • 1970-01-01
    • 2015-05-28
    • 2016-07-22
    相关资源
    最近更新 更多