【问题标题】:script to compress user files via searching through folders for certain folder name通过在文件夹中搜索特定文件夹名称来压缩用户文件的脚本
【发布时间】:2013-05-18 13:06:45
【问题描述】:

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

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*


}

【问题讨论】:

    标签: bash shell loops scripting


    【解决方案1】:

    这段代码:

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

    不会做你描述它应该做的事情。相反,如果文件夹userfiles 确实存在于当前工作目录中,它将多次压缩所有用户文件夹。

    试试这样的:

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

    【讨论】:

    • 谢谢,我会试一试
    • 感谢它的工作 - $IDS 没有被放入文件名,只有最后一个目录被添加到 zip 中。作为一种解决方法,我删除了 $IDS 并将 tar 添加到 'r' 以附加 tar
    【解决方案2】:

    我会省去 cat with 的无用用法

     NAME=$(sed -e "s/ //g" $USER_HOME/server.txt)
    

    您似乎也从未在函数中使用$USERS$IDS

    【讨论】:

    • 假设 sed 命令仅用于删除前导或尾随空格,NAME=( $(< $USER_HOME/server.txt) ) 是一种稍微复杂的方法,可以在不产生外部进程的情况下实现相同目的。
    • 感谢您的猫提示 - 我已经对脚本的其余部分进行了哈希处理
    【解决方案3】:

    此脚本中有几处不起作用,我不确定是否全部找到:

    1. 您真的要检查所有目录恰好低于/var/www/home/user/area/ 3 级吗?我希望有更严格的限制(即仅在带有特定名称的子目录中)或更宽松的限制(即所有目录最多低于/var/www/home/user/area/ 3 级)。

    2. for 循环使用变量i,但i 未在循环主体的任何地方使用。那是行不通的。

    3. 测试if [ ! -d "userfiles" ] 总是在同一个(即当前)目录中执行。那也行不通。

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

    5. tar 的参数是$USERS。我期待像"$i/userfiles" 这样的东西。

    【讨论】:

      猜你喜欢
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多