如何将/home下各目录单独打包为tar并保存至指定路径
直接在目标路径打包/home下的目录
没问题,我来帮你调整命令,让你直接在指定目标路径生成tar包,完全省掉后续移动的步骤!
基础版命令(适合目录名无特殊字符的情况)
假设你的目标保存路径是/backup,可以用这条命令:
find /home/ -type d -maxdepth 1 -mindepth 1 -exec tar cvf /backup/$(basename {}).tar {} \;
$(basename {}):专门提取/home下目录的纯名称(比如/home/my-folder会变成my-folder),这样打包后的文件名就是my-folder.tar,不会带/home路径前缀- 把
/backup/替换成你实际需要的目标路径即可 - 原命令里的
-maxdepth 1 -mindepth 1保留,确保只处理/home下的一级子目录,不会递归深入,也不会把/home本身算进去
更稳妥的版本(支持含空格/特殊字符的目录名)
如果你的目录名里有空格或者特殊符号(比如my folder、folder@2024),上面的基础版可能出问题,推荐用这个更安全的写法:
find /home/ -type d -maxdepth 1 -mindepth 1 -exec sh -c 'tar cvf "/backup/$(basename "$1").tar" "$1"' _ {} \;
这里用sh -c把打包逻辑封装成小脚本,并用双引号包裹变量,能完美处理各种特殊目录名的情况。
额外小技巧
- 提前确保目标路径存在:如果
/backup还没创建,先执行mkdir -p /backup(-p参数会自动创建多级目录) - 如果需要压缩包(更小体积):把
tar cvf改成tar czvf(生成gzip压缩的.tar.gz包),或者tar cjvf(生成bzip2压缩的.tar.bz2包),记得同步修改文件名后缀哦
内容的提问来源于stack exchange,提问作者Akash Sharma
相关产品推荐
相关产品推荐

