mo-*_*eph 13 linux filesystems cp filenames
当我使用 cp 将文件从 ext3 分区复制到 fat32 分区时:
cp -R /ext3/stuff /fat32/partition/
Run Code Online (Sandbox Code Playgroud)
我收到所有带有冒号和问号的文件的无效参数消息。
有没有办法让 cp 去除目标文件系统的无效字符?
编辑:我再次检查了 cp 的选项,除非我很愚蠢,否则那里什么都没有。我确定我可以写一个脚本,但感觉应该有一个更干净的解决方案!
Gil*_*il' 11
当您想要复杂的副本或重命名时,通常的怀疑对象是 GNU cp、来自 zsh、rsync 和 pax(或 cpio)的 zmv。cp 中没有重命名功能,rsync 中也没有(我认为)。虽然 zmv 可以重命名,但这与递归副本不太匹配。但是 pax 可以做到:
cd /ext3
pax -rw -s '/[*?:]/_/gp' stuff /fat32/partition
Run Code Online (Sandbox Code Playgroud)
这将每个更改*?:
为_
. 警告:最低限度的测试。如果存在冲突,则最后复制的文件获胜。
dhi*_*ill 11
根据 Gilles 的帖子,我测试了以下列表:
#!/bin/sh
touch questionmark?
touch less<
touch less\<
touch more\>
touch backslash\\
touch colon:
touch asterisk\*
touch pipe\|
touch inch\"
touch carret\^
touch comma,
touch semicolon\;
touch plus+
touch equals=
touch lbracket[
touch rbracket]
touch quote\'
Run Code Online (Sandbox Code Playgroud)
我尝试使用 vfat 文件系统和完善的pax
命令将其复制到 Android 手机 MicroSDHC 卡上,直到一切正常。对于 Windows 和 Unicode,这可能还不够:
pax -rw -s '/[?<>\\:*|\"]/_/gp' source dest
Run Code Online (Sandbox Code Playgroud)
您可能还想使用 -k 选项来确保没有覆盖(由于文件名冲突)。我在评论中给出的两个列表都不同于 Linux vfat 行为。