我有以下文件夹结构
folder
|
|--foo.txt
|
|--sub_folder
|
|--bar.txt
我想压缩文件夹的内容(文件和子文件夹),而不在压缩包中包含根文件夹。
我已经尝试过命令
zip -r package.zip folder
但这包括根文件夹。还尝试了以下形式
zip -j -r package.zip folder
但这会展平所有目录结构并仅包含文件。如何保留内部目录结构但忽略父文件夹?
答案1
zip
存储相对于当前目录的路径(当调用时),因此您需要更改它:
(cd folder && zip -r "$OLDPWD/package.zip" .)
&&
确保zip
仅在目录正确更改时运行,并且括号在子 shell 中运行所有内容,因此最后会恢复当前目录。使用OLDPWD
可以避免计算 的相对路径package.zip
。
答案2
zip -r package.zip folder/*
上面的命令将压缩folder
目录下的所有文件和子文件夹(它将忽略文件夹的父目录)
答案3
要添加到其他答案,对于脚本,您可以使用
pushd folder; zip -r ../package.zip .; popd
pushd
更改目录与 类似cd
,但会记住前一个目录,并popd
恢复最后记住的目录。
在这种情况下,它相当于删除括号(生成一个新的 shell)并; cd ..
在 Stephen 建议的命令末尾添加。
注意:我会将此添加为评论,但我不能,因为我没有足够的声誉。