单行命令/脚本用于存档一定数量的文件夹

单行命令/脚本用于存档一定数量的文件夹

我正在寻找一个单行命令或脚本,将 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 dirtar -c dir > dir.tar

示例脚本:

#!/bin/sh
DIR=$1
tar -cf $DIR.tar $DIR/
if [ $? -eq 0 ]; then
  rm -rf $DIR
fi

你可以把它放进去script.shchmod 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

相关内容