我有一些文件(文本文档和已保存的网页),我正将它们复制到 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 程序和操作系统中具有特殊含义的字符)。
以下链接可帮助您识别哪些字符可以使用以及哪些字符应避免使用,
概括:
- Windows:除 ASCII 的控制字符和
\ / : * ? " < > |
- Linux,OS-X:除 null 或 / 之外的任何内容
在所有平台上,最好避免使用不可打印字符,例如 ASCII 控制字符。
我认为,在 Linux 和 OS-X 中,只有可打印 ASCII 集中的 / 是被禁止的。某些字符(shell 元字符,如
* ? !
)会在命令行中引起问题,并且需要对文件名进行适当的引用或转义。