我的目录中有一个完整的项目,让我们说/Users/Me/Projects
。
这个文件夹里面有多个子目录,其中一些子目录甚至更多。
我希望能够在tar.gz
中创建每个档案的/Users/Me/Projects
档案,其档案与目录的名称相同。
例如,在Projects
文件夹中,Project1
,Project2
和Project3
。
我想要的是运行一个脚本来遍历Projects
中的目录而不是下面的子目录来创建Project1.tar.gz
,Project2.tar.gz
和{{1 }}
答案 0 :(得分:2)
使用GNU find:
cd /Users/Me/Projects
find . -maxdepth 1 -mindepth 1 -type d -exec tar -cvzf {}.tgz {} \;
答案 1 :(得分:2)
没有find
:
for dir in */; do tar -czvf "${dir%/}".tar.gz "$dir"; done
其中*/
确保glob只匹配目录,"${dir%/}"
从目录名中删除尾部斜杠。
如果有隐藏目录,则/*
不匹配;我们也可以使用shopt -s dotglob
。
答案 2 :(得分:1)
经过一些搜索和一点试验/错误,我想出了这个脚本,以编程方式完成我想要做的事情。
Project3.tar.gz
再次关注我在问题中给出的示例,假设我想在#! /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
修改强>
经过一些进一步的研究,Benjamin W.给出的答案似乎是最直接的方法。我希望找到一种方法来从新创建的存档名称中删除空格,以避免在其他文件系统上出现任何可能的问题,虽然我描述的方法确实剥离了空白区域,但它仍然遇到了一些障碍。