需要一个 shell 脚本来复制名称过长且超出容量的文件

需要一个 shell 脚本来复制名称过长且超出容量的文件

我在 NTFS 文件系统上有一个目录,其中包含短名称和长名称的文件,我输入复制命令将该目录复制到 Ext2 文件系统上,复制短名称的文件没有问题,但复制长名称的文件失败,我收到“文件名太长”错误,因为这些文件的数量太多,我需要一个 shell 脚本来分两步解决问题:

1-复制目录,然后删除具有短名称的复制文件(我知道移动命令可以做到这一点,但我想使用复制命令)

2-从具有长名称的剩余文件的名称末尾删除 15 到 20 个字符,之后我将重复这些步骤,直到所有文件都被复制。

谢谢。

答案1

要动态复制和截断文件名,您可以执行以下操作:

cd /src &&
LC_ALL=C pax -rws'|\([^/]\{255\}\)[^/]*|\1|g' ./* /dst/

截断为 255 字节路径组件。

请注意,如果文件名中存在多字节字符,它可能会在字符中间截断文件名。

它还会更新符号链接的目标(尽管我不确定 ntfs 是否支持符号链接)。

请注意,如果多个文件具有相同的前 255 个字节,则最终可能会导致文件相互覆盖。

相关内容