使用绝对路径压缩 linux 目录
Zip linux directory using absolute path
在 linux 实例中,我在 /var/lib/work_directories/ 位置下有一个名为 test 的目录需要在 /home/test_user/ 位置压缩为 test.zip.
我可以使用以下命令从位置 /home/test_user/ 创建一个 zip 文件:
zip test.zip /var/lib/work_directories/test
但是当我使用下面的命令解压缩它时,我可以看到它已经压缩 var 我需要导航到最后:
unzip test.zip
所以,在解压缩 test.zip 之后,它看起来像 /home/test_user/var/lib/work_directories/test/ 但理想情况下我希望这样的东西 /home/test_user/test/<:内容:>
任何建议都会很有帮助!提前致谢!
您的方法将取决于 /var/lib/work_directories/test
的结构。如果目录是扁平的,没有任何子目录,您可以简单地使用 -j
标志,这将删除所有父目录(包括直接父目录 test/
):
$> tree test
test
├── a
├── b
└── c
$> zip -rj test.zip test
updating: a (stored 0%)
updating: c (stored 0%)
updating: b (stored 0%)
如您所见,从存储的 value.This 中删除了每个文件的基本名称以外的所有内容,在大多数情况下可能无法很好地为您服务。最简单的解决方案是 cd
到目标目录并压缩。像 cd /var/lib/work_directories && zip -r test.zip test
作为脚本,它会像这样:
# absolute path to target directory
absolute=/var/lib/work_directories/test
# parent directory
dir="$(dirname $target)"
# directoy basename
base="$(basename absolute)"
cd "$dir"
zip -r "$target.zip" "$target"
这将导致仅包含最后一个目录名称:
updating: test/ (stored 0%)
adding: test/a (stored 0%)
adding: test/c (stored 0%)
adding: test/b (stored 0%)
如果您必须 return 到压缩后目录树中与之前相同的位置,您可以利用 push
和 popd
获得类似的效果:
# absolute path to target directory
absolute=/var/lib/work_directories/test
# parent directory
dir="$(dirname $target)"
# directoy basename
base="$(basename absolute)"
pushd "$dir"
zip -r "$target.zip" "$target"
popd
在 linux 实例中,我在 /var/lib/work_directories/ 位置下有一个名为 test 的目录需要在 /home/test_user/ 位置压缩为 test.zip.
我可以使用以下命令从位置 /home/test_user/ 创建一个 zip 文件:
zip test.zip /var/lib/work_directories/test
但是当我使用下面的命令解压缩它时,我可以看到它已经压缩 var 我需要导航到最后:
unzip test.zip
所以,在解压缩 test.zip 之后,它看起来像 /home/test_user/var/lib/work_directories/test/ 但理想情况下我希望这样的东西 /home/test_user/test/<:内容:>
任何建议都会很有帮助!提前致谢!
您的方法将取决于 /var/lib/work_directories/test
的结构。如果目录是扁平的,没有任何子目录,您可以简单地使用 -j
标志,这将删除所有父目录(包括直接父目录 test/
):
$> tree test
test
├── a
├── b
└── c
$> zip -rj test.zip test
updating: a (stored 0%)
updating: c (stored 0%)
updating: b (stored 0%)
如您所见,从存储的 value.This 中删除了每个文件的基本名称以外的所有内容,在大多数情况下可能无法很好地为您服务。最简单的解决方案是 cd
到目标目录并压缩。像 cd /var/lib/work_directories && zip -r test.zip test
作为脚本,它会像这样:
# absolute path to target directory
absolute=/var/lib/work_directories/test
# parent directory
dir="$(dirname $target)"
# directoy basename
base="$(basename absolute)"
cd "$dir"
zip -r "$target.zip" "$target"
这将导致仅包含最后一个目录名称:
updating: test/ (stored 0%)
adding: test/a (stored 0%)
adding: test/c (stored 0%)
adding: test/b (stored 0%)
如果您必须 return 到压缩后目录树中与之前相同的位置,您可以利用 push
和 popd
获得类似的效果:
# absolute path to target directory
absolute=/var/lib/work_directories/test
# parent directory
dir="$(dirname $target)"
# directoy basename
base="$(basename absolute)"
pushd "$dir"
zip -r "$target.zip" "$target"
popd