引子
前段时间的项目中在windows下使用了docker容器,在从容器内使用docker cp命令拷贝文件夹到外面的时候发现很多文件都被生成了一个新的带Zone.Identifier结尾的新文件,本记录主要是为了搞清楚该文件的来历以及如何避免/如何删除该文件。
Zone.Identifier文件的来历
从 docker 容器中拷贝出来的文件夹中,会多出一个以 Zone.Identifier 结尾的备份文件,通常是由于 Windows 系统的安全特性导致的。Windows 使用 Zone.Identifier 文件来标记文件的来源,以防止潜在的安全风险。
Windows 操作系统有一个名为“Zone Identifier”的安全特性,用于标记文件的来源。当你从互联网或其他不受信任的来源下载文件时,Windows 会自动为这些文件创建一个 Zone.Identifier 文件,以标记它们为“不受信任”。
当使用 docker cp 命令从 Docker 容器中拷贝文件到 Windows 主机时,Windows 可能会将这些文件视为从不受信任的来源传输的,从而为每个文件创建一个 Zone.Identifier 文件。
例如从 Docker 容器中拷贝一个文件 example.txt,则会在目标目录中看到以下文件:
example.txt
example.txt:Zone.Identifier
如何不生成Zone.Identifier文件
正常来说这些 Zone.Identifier 文件通常不会影响文件的正常使用,我们可以选择忽略掉,但是如果觉得看着难受的话(比如我),可以考虑下述方法:
1、使用 tar 进行文件传输:
在windows中,只有在文件传输时会生成Zone.Identifier文件,因此我们可以可以使用 tar 命令将文件打包后再传输,这样可以避免 Windows 自动创建 Zone.Identifier 文件。
# 在 Docker 容器中打包文件
docker exec -it <container_name> tar czf - /path/to/folder > folder.tar.gz# 在 Windows 主机上解压文件
tar xzf folder.tar.gz
2、使用 rsync 进行文件传输:
如果你有 rsync 工具,可以使用它来传输文件,rsync 通常不会创建 Zone.Identifier 文件。
rsync -avz --progress user@remote_host:/path/to/folder /local/path
这个方法没有试过,不确定一定可行
3、修改 Windows 安全设置:
可以通过修改 Windows 的安全设置,禁用自动创建 Zone.Identifier 文件的功能。但这通常不推荐,因为它可能会降低系统的安全性。
如何快速删除Zone.Identifier文件
如果已经生成了Zone.Identifier文件,而我们又不希望要这些文件,则需要快速删除这些文件。在linux下可以通过查找+删除命令快速清除文件夹内的这些文件:
find /path/to/folder -type f -name "*Zone.Identifier" -exec rm -f {} \;
find /path/to/folder: 在指定目录 /path/to/folder 中查找文件。-type f: 只查找文件(不包括目录)。-name "*Zone.Identifier": 查找名称以 Zone.Identifier 结尾的文件。-exec rm -f {} \;: 对找到的每个文件执行 rm -f 命令,{} 是 find 命令找到的文件的占位符,\; 表示命令的结束。
例如我们要清除 /home/user/myfolder 目录下的所有 Zone.Identifier 文件,可以使用以下命令:
find /home/user/myfolder -type f -name "*Zone.Identifier" -exec rm -f {} \;
此外,上述命令也可以使用xargs方法进行操作:
find /path/to/folder -type f -name "*Zone.Identifier" | xargs rm -f
| xargs rm -f: 将找到的文件列表传递给 rm -f 命令进行删除。