通过在文件夹中搜索特定文件夹名称来压缩用户文件的脚本

时间:2013-05-18 13:06:46

标签: bash shell loops scripting

我正在为我的一个程序编写一个函数,需要搜索一些文件夹,直到我们找到一个名为“userfiles”的文件夹,然后我们将这个文件夹放在这个文件夹中,给出它所在文件夹的文件名。以下方法是最好的方法吗?

compress(){
NAME=$(cat $USER_HOME/server.txt | sed -e "s/ //g")
USERS=/var/www/home/user/area/*/*/*/
IDS=${PWD##*/}

# Apache Logs
tar -zcvf logs-$NAME.tar.gz /var/log/apache2

# User Logs
 for i in $USERS; 
       do
               if [ ! -d "userfiles" ];
                       then
                               tar -zcvf userfiles-$NAME-"$IDS".tar.gz  $USERS
               fi
 done;

# Linux Logs
tar -zcvf linux-logs-$NAME.tar.gz /var/log/auth.log* /var/log/syslog* /var/log/kern.log* /var/log/mail.log*


}

3 个答案:

答案 0 :(得分:1)

此代码:

for i in $USERS; 
  do
    if [ ! -d "userfiles" ];
      then
        tar -zcvf userfiles-$NAME-"$IDS".tar.gz  $USERS
    fi
done;

不会做你所描述的应该做的事情。相反,如果文件夹userfiles 当前工作目录中存在,则会多次tar 所有用户文件夹。< / p>

尝试这样的事情:

for d in $USERS; do
  if [ -d "${d}userfiles" ]; then
    tar -zcvf "userfiles-$NAME-$IDS.tar.gz" "${d}userfiles"
  fi
done

答案 1 :(得分:0)

我会用

来保存猫的无用用法
 NAME=$(sed -e "s/ //g" $USER_HOME/server.txt)

看起来你从不在函数中使用$USERS$IDS

答案 2 :(得分:0)

这个脚本中有几件东西不起作用,我不确定我是否全部找到了它们:

  1. 您真的想要检查 以下{{1>}以下3级的所有目录吗?我希望有更严格的东西(也就是说,只在带有某些名字的子目录中)或更宽松的东西(即所有目录最多在/var/www/home/user/area/以下3级)。

  2. /var/www/home/user/area/循环使用变量for,但i未在循环体中的任何位置使用。那不行。

  3. 测试i始终在相同(即当前)目录中执行。这也无济于事。

  4. 我不理解if [ ! -d "userfiles" ]中的否定。

  5. if [ ! -d "userfiles" ]的论点是tar。我期待像$USERS