如何复制带有标点符号的文件?

如何复制带有标点符号的文件?


我有一些文件(文本文档和已保存的网页),我正将它们复制到 USB 上,方法是按 Ctrl+C 选中它们,然后按 Ctrl+V 将其复制到 USB 驱动器中。一旦开始复制,就会弹出一个对话框,提示我必须重命名或跳过某个文件。很多文件都是这样,我意识到如果我想复制这些文件,我必须删除文件名中的所有标点符号。我不知道该怎么办,似乎我别无选择,只能对所有这些文件执行此操作。我该如何停止这种情况?

答案1

您可以使用以下脚本,假设您想要将 USB 密钥上目录 DIR1 中的所有文件复制到另一个 DIR2。

如果您的文件选择更复杂,您可以调整脚本,例如使用find

如果有其他非法字符,只需添加更多sed命令。

#!/bin/bash 

DIR1=/path/to/origin 
DIR2=/path/to/target 

for file in `ls $DIR1` 
do
   newfile=`echo $file |  sed 's/\./_stop_/g' | sed 's/,/_comma_/g'`
   cp $DIR1/$file $DIR2/$newfile 
done

答案2

如果源分区(内部驱动器)和目标分区(USB 驱动器)中具有相同的文件系统,则复制应该可以进行,至少在文件名周围加上引号的情况下是这样。

但最好避免在文件名中使用特殊字符(我的意思是在文件系统以及正在使用或将要使用的 shell 程序和操作系统中具有特殊含义的字符)。

以下链接可帮助您识别哪些字符可以使用以及哪些字符应避免使用,

superuser.com/questions/358855/what-c​​haracters-are-safe-in-cross-platform-file-names-for-linux-windows-and-os

概括:

  • Windows:除 ASCII 的控制字符和\ / : * ? " < > |
  • Linux,OS-X:除 null 或 / 之外的任何内容

在所有平台上,最好避免使用不可打印字符,例如 ASCII 控制字符。

我认为,在 Linux 和 OS-X 中,只有可打印 ASCII 集中的 / 是被禁止的。某些字符(shell 元字符,如* ? !)会在命令行中引起问题,并且需要对文件名进行适当的引用或转义。

相关内容