Debian 上带有反斜杠的 tar 文件

Debian 上带有反斜杠的 tar 文件

我需要从 Debian 10 pod 复制包含(Windows 风格)反斜杠的文件。我GNU tar 1.30在使用反斜杠归档文件时遇到问题:

docker run --rm -it debian:10 bash

例如,在容器内运行:

touch C\:\\LOG_DOTNET\\1
touch C\:\\LOG_DOTNET\\2

带有反斜杠的文件:

ls -l C\:*

-rw-r--r-- 1 root root 0 Mar 14 17:20 'C:\LOG_DOTNET\1'
-rw-r--r-- 1 root root 0 Mar 14 17:20 'C:\LOG_DOTNET\2'

尝试使用tar通配符进行存档:

tar cvf a.tar C\:*

tar: C\:\\LOG_DOTNET\001: Cannot stat: No such file or directory
tar: C\:\\LOG_DOTNET\002: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

尝试find打印NUL字符并使用xargs

find . -name C\:\* -print0 | xargs -0 tar cvf a.tar

tar: ./C\:\\LOG_DOTNET\002: Cannot stat: No such file or directory
tar: ./C\:\\LOG_DOTNET\001: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

尝试单引号每一行:

find . -name C\:\* | sed "s/'/'\\\\''/g; s/^/'/; s/$/'/" | xargs tar cvf a.tar

tar: ./C\:\\LOG_DOTNET\002: Cannot stat: No such file or directory
tar: ./C\:\\LOG_DOTNET\001: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

我也不明白为什么\00会出现而不是\\(似乎是我的问题的原因)。

如果您提供kubectl cpkubectl exec命令复制此类文件,则会有好处。 :-)

答案1

我在这里找到了答案:超级用户问题

find . -name C\:\* -print0 | tar --null -T - -cf a.tar 

来自 tar 手册:

--null Instruct subsequent -T options to read null-terminated names verbatim  (disables  special  handling  of
              names that start with a dash).

对于-T,我们可以使用标准输入作为源。 => 测试:

find -name 'C:*' -print0 |tar --null -T - -cf a.tar
tar tf a.tar 
./C:\\LOG_DOTNET\\2
./C:\\LOG_DOTNET\\1

相关内容