如何复制文件名包含“:”的文件?

如何复制文件名包含“:”的文件?

我有一个外部 USB 驱动器,其中一些文件名包含“:”,例如 Screenshot-08-09-12 -08:10:45.png(旧屏幕截图)。我可以将这些文件复制到计算机的硬盘上,但无法将它们复制回外部硬盘,因为文件应用程序会自动重命名它们。终端中的 cp 命令返回一个带有非法参数的错误。

我也在 Ubuntu 20.10 和 LinuxMint 20 上使用这个驱动器。如何将这样的文件复制回外部硬盘驱动器而不重命名?

据我了解,重命名此类文件名的功能已经实现,是为了处理仅支持 Microsoft 文件命名的文件系统。

外部磁盘的文件类型:NTFS(分区类型:NTFS/exFAT/HPFS)

答案1

# Creating a mount-point
mkdir Test
# Creating a dummy file to be transferred to the NTFS-partition
touch file:test.txt
# Mounting the external drive on the mount-point
sudo mount -t ntfs -o utf8 /dev/sdc1 ./Test
# Copying file
cp file\:test.txt Test

答案2

我不知道文件是如何保存到硬盘上的,因为冒号 ( :) 在 NTFS 中是保留的。我猜想在将文件复制到 Ubuntu 或 Mint 时文件名是“原样”的,因为它们可以毫无障碍地处理文件名中的冒号。

如果在 Mint 中将它们复制回 NTFS 格式的硬盘驱动器,则可能有一个“中间人”翻译文件名,使其与 NTFS 兼容。正如提议的那样StackOverflow 问题您可以尝试使用与 NTFS 兼容且视觉上类似于冒号的 Unicode 字符。

如果您可以提供运行时收到的确切错误消息cp以及导致该问题的确切命令,我或许可以提供进一步的指导。

总之,尝试使用不同的 Unicode 字符代替冒号,因为它在 NTFS 文件系统上是“保留的”。

答案3

我描述了当源和目标的文件系统都是 Linux 文件系统(例如 ext4,这是 Ubuntu 的标准文件系统)时它在 Ubuntu 中的工作方式。(其他 [非 Linux] 文件系统可能会导致问题。)

cp当我用单引号或双引号引用文件名时,它可以复制名称中带有冒号的文件。

  • 例如:如果你想保留文件名

    cp 'file:name' target-directory
    

    或者

    cp "file:name" target-directory
    
  • 例如:如果你愿意,你可以更改文件名

    cp 'file:name' target-directory/filename
    

    如果目标文件系统不接受文件名中的冒号,这可能会有所帮助。


编辑1:

我可以确认,将文件名中带有冒号的文件写入 NTFS 文件系统是可行的。这让我认为您的挂载选项或文件系统存在问题。

  • 如果问题出在挂载选项(所有权和/或权限)上,那么此链接可以帮助。

  • 也可能是文件系统太脏(关闭时没有刷新缓冲区)或以其他方式损坏。在这种情况下,Linux 通常默认以只读方式挂载。您可以尝试修复文件系统,Microsoft 文件系统应使用 Windows 进行修复。

编辑2:

另请参阅以下链接,询问如何禁止文件名中的某些字符(例如冒号),以便它们在 Windows 中正常工作(这与 Linux 在 NTFS 中存储和访问不同)。

让 Linux 禁止 NTFS 分区上的文件名使用冒号

相关内容