我有一堆(大约 10 GB)文件需要从外部 Linux 磁盘复制到 Windows 计算机。不幸的是,一些包含“:”字符的文件名已进入此集合。
这些冒号文件都不需要放在 Windows 机器上,所以我需要一个快速的解决方案来删除或重命名它们。
你们都推荐什么?(我假设 Linux 中有类似 bash / perl / python 脚本的东西。Windows 机器上没有 powershell。)
答案1
审查有问题的文件。
find /path/to/files -name '*:*' -print
删除有问题的文件。
find /path/to/files -name '*:*' -exec rm {} +
用下划线重命名有问题的文件。
find /path/to/files -name '*:*' -exec rename ':' '_' {} +
答案2
为了获得更高效的 Dan C 版本,请删除一些 UNIX 变体支持:
find /path/to/files -name '*:*' -delete
/bin/rm
这避免了对每个匹配的文件进行 fork 和 exec 的需要。
这个-delete
选项在 MacOS X 和我的 FC11 系统(带有)上都有findutils-4.4.0
。我不知道它是多久前添加到的findutils
。
答案3
您可以通过以下方式删除所有文件
rm *:*
在 Linux 机器上的目录中。
这将删除所有包含冒号的文件。
或者你可以使用重命名命令重命名它们
rename 'y/(.*):(.*)/$1$2/' *
这将取代 test:something 成为 testsomething
答案4
如果您想在运行中更改文件名(不修改源目录),GNU tar 有一个 --transform 选项。
tar cf - -C $SOURCE_DIR . --transform=s/:/_/g | tar xf - -C $DEST_DIR
您还可以使用 --exclude 选项来避免这些文件。
tar cf - -C $SOURCE_DIR . --exclude='*:*' | tar xf - -C $DEST_DIR
在我工作的 RHEL5 机器上我没有看到 --transform 选项,但我认为它在其他地方很常见。