我正在寻找一个单行命令或脚本,将 5 个文件夹存档到特定目录中的 .tar 文件(无需 gzip/bzip),并在成功压缩后删除这些文件夹。它也必须使用原始文件夹名称作为存档的文件名。
到目前为止,我已经使用了当前命令,该命令每次只执行一个目录:
tar -c directory > directory.tar && rm -rf directory
提前致谢。
答案1
这将处理作为参数传递给脚本的目录下的前五个目录。
#!/bin/bash
c=1
for directory in $1/*
do
if [[ -d "$directory" ]]
then
tar -cf "${directory}.tar" "$directory" && rm -rf "$directory"
if (( c++ > 5 ))
then
break
fi
fi
done
我对这个限制的原因很好奇。
答案2
它有点长但是:
for i in dir1 dir2 dir3; do tar -cf $i.tar $i; if [ $? -eq 0 ]; then rm -rf $i; fi; done
编辑;tar -cf dir.tar dir
比tar -c dir > dir.tar
示例脚本:
#!/bin/sh
DIR=$1
tar -cf $DIR.tar $DIR/
if [ $? -eq 0 ]; then
rm -rf $DIR
fi
你可以把它放进去script.sh
,chmod 755 script.sh
然后像script.sh directory
但是,您可以添加更多内容,从主目录获取目录列表,甚至使用文件来跟踪上次directory
存档的时间,以便您可以设置最大值等。
答案3
for dir in dir1 dir2 dir3 dir4 dir5 ; do tar -c "$dir" > "$dir".tar && rm -rf "$dir" ; done