我有一个外部 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 中存储和访问不同)。