压缩没有父目录的目录中的所有文件和子文件夹

压缩没有父目录的目录中的所有文件和子文件夹

我有以下文件夹结构

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 建议的命令末尾添加。

注意:我会将此添加为评论,但我不能,因为我没有足够的声誉。

答案4

您需要在命令中使用-j--junk-paths以避免父目录并仅压缩文件。 Zip命令参考

-j
--junk-paths

仅存储已保存文件的名称(丢弃路径),而不存储目录名称。默认情况下,zip将存储完整路径(相对于当前目录)。

参考答案

相关内容