Bash脚本,使用子目录的命令

时间:2016-07-19 07:40:05

标签: bash stat subdirectory

我正在尝试比较两个目录中的文件,但是我无法使我的stat命令正常工作,我可以使用与此处相同的语法从命令行开始工作。

# Usage: compdir <base_dir> <modified_dir>

    # Handle MODIFIED and REMOVED files
    for i in "${arr1[@]}"
    do
        REMOVED=1
        for j in "${arr2[@]}"
        do
            if [ $i = $j ]; then
                # take time stamps
                dir1="$1" 
                dir2="$2"
                stamp1=stat --format %Y "$i"   <--------- THIS LINE
                stamp2=stat --format %Y "$j"
                if [[ $stamp1 > $stamp2 ]] ; then
                    echo "$j MODIFIED"
                fi
                REMOVED=0
                break
            fi
        done
        if [ $REMOVED -eq 1 ]; then
            echo $i REMOVED
        fi
    done
    # handle NEW files
    for j in "${arr2[@]}"
    do
        NEW=1
        for i in "${arr1[@]}"
        do
            if [ $j = $i ]; then
                NEW=0
                break
            fi
        done
        if [ $NEW -eq 1 ]; then
            echo "$j NEW"
        fi
    done

在标有&lt; -------的行和下面的行中,我收到错误--format:command not found。我假设这是因为我在基本目录而不是在子目录中。因为传递的参数是我尝试做过类似“$ 1 / $ i”的目录的名称,以使该行工作但没有运气。

1 个答案:

答案 0 :(得分:3)

您不能只是将命令分配给变量,您必须使用$()或``在子shell中执行此操作。像这里:

选项1:

stamp1=$(stat --format %Y "$i")

选项2:

stamp1=`stat --format %Y "$i"`

我个人更喜欢选项1(子shell)

附录:正如sp asic(thx)的评论中所述,使用$()作为后记是遗留语法,请参阅:http://mywiki.wooledge.org/BashFAQ/082