比较bash脚本中的相对路径

时间:2015-12-06 14:54:08

标签: bash shell timestamp

我正在尝试构建一个bash脚本,它能够比较两个以$ 1和$ 2为参数的目录,并更改文件'第二个目录中的时间戳(如果它们与给定的时间戳$ 3不同)与第一个目录中具有相同名称的文件相同。我对此做得不错,但我不知道如何访问给定目录中的文件夹,并比较这些文件夹中的文件。

例如,如果我将Directory1和Directory2作为参数提供:

Directory1包含:

-text.txt
-folder1/secondfile.txt
-folder2/thirdfile.txt

和Directory2包含:

-text.txt
-folder1/secondfile.txt
-folder3/thirdfile.txt

所以在这种情况下,我希望我的脚本修改文件text.txt和secondfile.txt,但不要修改thirdfile.txt,因为相对路径不相同。我的脚本如何访问目录中的文件夹以及如何比较相对路径?我已经设法用目录中的文件做了我想做的事情,但没有设置文件夹,我不知道如何比较相对路径,即使我搜索了一下我也找不到它。

到目前为止,我已经完成了这个脚本(在SO的帮助下):

#!/bin/bash

cd "$1"

function check {
for i in *; do
    if [[-d "$i"]]; then
        cd "$i"
        check
        cd -
    fi

    if [[-f "$i"]]; then
        if [[stat %y "$i" == "$3"]]; then
            #if [[path check]];then
                #touch -r "$i" "$2/path/$i"
    fi
}

并且我不知道如何进行[[path check]]检查两个文件是否具有相同的相对路径(相对于作为参数给出的目录)。

编辑:

如答案所示,以下代码是正确的方法吗?

#!/bin/bash

cd "$1"
shopt -s globstar

for i in **; do

    if [[stat %y "$i" == "$3"]]; then
        if [["$1/$i" == "$2/$i"]];then
            touch -r "$i" "$2/$i"
    fi

1 个答案:

答案 0 :(得分:0)

之前有一个答案,我想回复,建议使用shopt -s globstar**代替*

另外一个问题是“我能比较相对路径吗?”。

是的,你愿意。使用shopt -s globstar**展开以包含每个文件的相对路径。所以它会返回text.txt folder1/secondfile.txt folder2/thirdfile.txt

编辑:

你也不需要cd“$ 1”,因为“$ 1”和“$ 2”在dir“$ 1”中不存在。尝试以下方面:

#!/usr/bin/env bash
shopt -s globstar

for i in $(cd "$1"; echo **); do
    if [[ $(stat -c %y "$1/$i") == "$3" ]]; then
        if [[ -f "$1/$i" ]] && [[ -f "$2/$i" ]]; then
            touch -r "$1/$i" "$2/$i"
        fi
    fi
done