Dam*_*ami 51 command-line compression zip
我想像这样在目录树中压缩许多文件夹
V-
something.txt
folder
folder
g.jpg
h.jar
Run Code Online (Sandbox Code Playgroud)
当我尝试压缩它时,它会结束使用 v 文件夹而不是它的内容(子目录和文件)创建一个 zip 存档
我怎样才能避免这种情况?
小智 44
在 zip 命令中使用-jor--junk-paths选项。
从zip 手册页:
Run Code Online (Sandbox Code Playgroud)-j --junk-paths Store just the name of a saved file (junk the path), and do not store directory names. By default, zip will store the full path (relative to the current directory).
jsp*_*zel 36
因此,如果我理解正确,您正在尝试将文件和文件夹存档在特定文件夹中,但不包括根文件夹。
例子:
/test/test.txt
/test/test2.txt
Run Code Online (Sandbox Code Playgroud)
其中 test.txt 和 test2.txt 将存储在 zip 中,而不是 /test/
你可以 cd 进入 /test/ 目录然后运行类似的东西,
zip -r filename.zip ./*
Run Code Online (Sandbox Code Playgroud)
这将在名为 filename.zip 的同一文件夹中创建一个存档。或者,如果从您可以运行的文件夹外部运行它,
zip -r test.zip test/*
Run Code Online (Sandbox Code Playgroud)
/* 是仅包含文件夹内容的部分,而不是整个文件夹。
编辑:OP 想要多个 zip,解决方案最终有点麻烦,我很好奇是否有更好的方法来做到这一点。
for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;
Run Code Online (Sandbox Code Playgroud)
小智 27
这个命令怎么样?
$ cd somedir ; zip -r ../zipped.zip . * ; cd ..
Run Code Online (Sandbox Code Playgroud)
Ken*_*eth 24
希望这可以帮助。
(cd directory && zip -r ../out.zip .)
Run Code Online (Sandbox Code Playgroud)
它将主 shell 保持在同一目录中,并且只更改在命令后死亡的子 shell 的目录。
小智 6
cd `dirname path/to/archive` && zip -rq $OLDPWD/arhive.zip . && cd -
Run Code Online (Sandbox Code Playgroud)
这不仅适用于展平树(例如-j),而且您可以指定任何目录(不仅是子目录)