从多个目录创建多个 tar.gz 存档
Create multiple tar.gz archives from multiple directories
我有一个目录里面全是项目,比方说/Users/Me/Projects
。
此文件夹内有多个子目录,其中一些子目录甚至更多。
我希望能够为 /Users/Me/Projects
中的每个存档创建一个 tar.gz
存档,其存档将与目录同名。
例如,在 Projects
文件夹中,我有 Project1
、Project2
和 Project3
。
我想要的是 运行 一个脚本来遍历 Projects
中的目录,而不是创建下面的子目录 Project1.tar.gz
, Project2.tar.gz
, 和 Project3.tar.gz
.
经过一些搜索和trial/error,我想出了这个脚本来以编程方式完成我想做的事情。
#! /bin/sh
for dir in `find . -maxdepth 1 -mindepth 1 -type d | sed 's|./||'`
do
tar -czvf /Path/To/Place/Created/Archives/$dir.tar.gz /Path/To/Directories/$dir;
done
再次回到我在问题中给出的例子,假设我想在我的 Documents
文件夹中创建档案,脚本看起来像这样。
#! /bin/sh
for dir in `find . -maxdepth 1 -mindepth 1 -type d | sed 's|./||'`
do
tar -czvf /Users/Me/Documents/$dir.tar.gz /Users/Me/Projects/$dir;
done
编辑
经过进一步研究,Benjamin W. 给出的答案似乎是最直接的方法。我希望找到一种方法从新创建的存档名称中删除 spaces 以避免在其他文件系统上出现任何可能的问题,虽然我描述的方法确实删除了白色 space,但它有一个我 运行 遇到了一些障碍。
使用 GNU 查找:
cd /Users/Me/Projects
find . -maxdepth 1 -mindepth 1 -type d -exec tar -cvzf {}.tgz {} \;
没有find
:
for dir in */; do tar -czvf "${dir%/}".tar.gz "$dir"; done
其中 */
确保 glob 仅匹配目录,"${dir%/}"
删除目录名称的尾部斜杠。
如果有隐藏目录,*/
不匹配;也得到那些,我们可以使用 shopt -s dotglob
.
我有一个目录里面全是项目,比方说/Users/Me/Projects
。
此文件夹内有多个子目录,其中一些子目录甚至更多。
我希望能够为 /Users/Me/Projects
中的每个存档创建一个 tar.gz
存档,其存档将与目录同名。
例如,在 Projects
文件夹中,我有 Project1
、Project2
和 Project3
。
我想要的是 运行 一个脚本来遍历 Projects
中的目录,而不是创建下面的子目录 Project1.tar.gz
, Project2.tar.gz
, 和 Project3.tar.gz
.
经过一些搜索和trial/error,我想出了这个脚本来以编程方式完成我想做的事情。
#! /bin/sh
for dir in `find . -maxdepth 1 -mindepth 1 -type d | sed 's|./||'`
do
tar -czvf /Path/To/Place/Created/Archives/$dir.tar.gz /Path/To/Directories/$dir;
done
再次回到我在问题中给出的例子,假设我想在我的 Documents
文件夹中创建档案,脚本看起来像这样。
#! /bin/sh
for dir in `find . -maxdepth 1 -mindepth 1 -type d | sed 's|./||'`
do
tar -czvf /Users/Me/Documents/$dir.tar.gz /Users/Me/Projects/$dir;
done
编辑
经过进一步研究,Benjamin W. 给出的答案似乎是最直接的方法。我希望找到一种方法从新创建的存档名称中删除 spaces 以避免在其他文件系统上出现任何可能的问题,虽然我描述的方法确实删除了白色 space,但它有一个我 运行 遇到了一些障碍。
使用 GNU 查找:
cd /Users/Me/Projects
find . -maxdepth 1 -mindepth 1 -type d -exec tar -cvzf {}.tgz {} \;
没有find
:
for dir in */; do tar -czvf "${dir%/}".tar.gz "$dir"; done
其中 */
确保 glob 仅匹配目录,"${dir%/}"
删除目录名称的尾部斜杠。
如果有隐藏目录,*/
不匹配;也得到那些,我们可以使用 shopt -s dotglob
.