问题

下面压缩指令如何修改能跳过docker_data/目录下的文件夹dst:

tar -cvzf docker_data.tar docker_data/

要跳过 docker_data/ 目录下的 dst 文件夹,可以使用以下几种方法:

方法1:使用 --exclude 参数(推荐)

tar -cvzf docker_data.tar --exclude='docker_data/dst' docker_data/

或者更精确的排除模式:

tar -cvzf docker_data.tar --exclude='docker_data/dst/*' docker_data/

方法2:使用 --exclude-from 文件

如果有很多需要排除的目录,可以创建一个排除文件:

# 创建排除文件
echo "docker_data/dst" > exclude_list.txt

# 使用排除文件
tar -cvzf docker_data.tar --exclude-from=exclude_list.txt docker_data/

方法3:使用通配符排除

tar -cvzf docker_data.tar --exclude='dst' docker_data/

方法4:使用 find 命令配合 tar

find docker_data/ -type f ! -path "docker_data/dst/*" -print0 | tar -cvzf docker_data.tar --null -T -

验证排除效果

在压缩前可以先测试哪些文件会被包含:

# 测试模式,不实际创建压缩包
tar -cvzf docker_data.tar --exclude='docker_data/dst' docker_data/ --list

或者使用详细模式查看被跳过的文件:

tar -cvzf docker_data.tar --exclude='docker_data/dst' --verbose docker_data/

排除多个目录

如果需要排除多个目录:

tar -cvzf docker_data.tar \
    --exclude='docker_data/dst' \
    --exclude='docker_data/temp' \
    --exclude='docker_data/logs' \
    docker_data/

注意事项

  1. 路径匹配:排除模式是相对于当前工作目录的,所以使用 docker_data/dst 而不是 ./docker_data/dst

  2. 通配符使用:如果 dst 可能在多个地方出现,使用更精确的路径避免误排除

  3. 权限问题:确保对要压缩的文件有读取权限

推荐使用方法1,因为它简单直接且易于理解:

tar -cvzf docker_data.tar --exclude='docker_data/dst' docker_data/

这样就会创建一个不包含 docker_data/dst 目录的压缩包。