我有一堆需要恢复的目录,但它们必须首先被打包成一个.tar文件。是否有一个脚本可以让我将所有100多个目录打包成它们自己的tar文件,所以目录变成目录.tar。
目前尝试过的方法:
for i in *; do tar czf $i.tar $i; done
我有一堆需要恢复的目录,但它们必须首先被打包成一个.tar文件。是否有一个脚本可以让我将所有100多个目录打包成它们自己的tar文件,所以目录变成目录.tar。
目前尝试过的方法:
for i in *; do tar czf $i.tar $i; done
find . -maxdepth 1 -mindepth 1 -type d
并对每个执行tar操作:
find . -maxdepth 1 -mindepth 1 -type d -exec tar cvf {}.tar {} \;
find . -maxdepth 1 -mindepth 1 -type d -exec tar cvf {}.tar {} --remove-files \;
。 - xb.find . -type d -maxdepth 1 -mindepth 1 -exec tar zcvf {}.tar.gz {} \;
意思是在当前目录下,找到所有的文件夹(排除当前目录),对每个文件夹进行压缩,压缩后的文件名为原文件夹名加上".tar.gz"后缀。 - Bernhard Döbler您在该级别是否有任何带空格的目录名称?如果没有,您的脚本将完美运行。
我通常会编写一个脚本,其中包含我想要执行的命令:
$ for i in *
do
echo tar czf $i.tar $i
done
然后,您可以查看输出并查看它是否符合您的要求。在确定程序将正常工作后,编辑命令行并删除echo
命令。
for i in *
do
tar czf "$i.tar" "$i"
done
使用GNU Parallel可以简单地并行完成所有任务:
parallel tar -cf {}.tar {} ::: *
--dry-run
,如下所示:parallel --dry-run tar -cf {}.tar {} ::: *
示例输出
tar -cf ab.tar ab
tar -cf cd.tar cd
for i in *
do
echo tar czf $i.tar $i
done