unix比较两个目录,如果目录1中只存在一个目录,那么就做一些事情

时间:2014-01-24 11:28:41

标签: unix if-statement

我有两个目录,我想根据比较结果做一些事情。

以下是我的脚本

#!/bin/sh
# the script doesn't work below if a the above line says bash
for i in $(\ls -d /data_vis/upload/); 
    do 
        diff ${i} /data_vis/upload1/;
    done

以上脚本的输出

Common subdirectories: /data_vis/upload/2012_06 and /data_vis/upload1/2012_06
Common subdirectories: /data_vis/upload/2012_07 and /data_vis/upload1/2012_07
Only in data_vis/upload/: 2012_08
Only in /data_vis/upload/: 2012_09
Only in /data_vis/upload/: index.php
Only in /data_vis/upload/: index.php~

问题?
如何使用此输出来执行某些操作,例如:见下文

伪代码

if   Only in data_vis/upload/: 2012_08  # e.g if directory only exists in upload directory
    then do something
else 
    do something else
Finish

欢迎任何评论或更好的解决方案/命令!

1 个答案:

答案 0 :(得分:1)

我明白你想要解析diff的输出。

首先,您的最外层for循环不是必需的,因为“ls” - 操作只返回一个项目。任务可以按如下方式完成:

#!/bin/sh
diff data_vis/upload/ data_vis/upload1/ | while read line
  do
    if echo $line | grep "Only in">/dev/null;then
      # parse the name of the directory where the not matched dir is located
      dironlyin=$(echo $line|awk -F ":" '{split($1,f," ");print f[3];}');

      # parse the name of the not matched dir
      fileonlyin=$(echo $line|awk -F ":" '{l=length($2);print substr($2,2,l-2);}');

      # prove that the parsing worked correctly
      echo "do something with file \""$fileonlyin"\" in dir \""$dironlyin"\""
    else
      # do your own parsing here if needed
      echo "do something else with "\"$line\"
    fi
done

您需要自己解析以“Common subdirectories”开头的行。我希望awk迷你脚本可以帮助你做到这一点!

干杯 约尔格