比较bash脚本中的相对路径

比较bash脚本中的相对路径,bash,shell,timestamp,Bash,Shell,Timestamp,我正在尝试构建一个bash脚本,它能够比较参数$1和$2给出的两个目录,并将第二个目录中文件的时间戳(如果它们与给定的时间戳$3没有区别)更改为与第一个目录中具有相同名称的文件相同。我对此没有意见,但我不知道如何访问给定目录中的文件夹,并比较这些文件夹中的文件 例如,如果我将Directory1和Directory2作为参数给出: 目录1包含: -text.txt -folder1/secondfile.txt -folder2/thirdfile.txt -text.txt -folder1

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

例如,如果我将Directory1和Directory2作为参数给出:

目录1包含:

-text.txt
-folder1/secondfile.txt
-folder2/thirdfile.txt
-text.txt
-folder1/secondfile.txt
-folder3/thirdfile.txt
目录2包括:

-text.txt
-folder1/secondfile.txt
-folder2/thirdfile.txt
-text.txt
-folder1/secondfile.txt
-folder3/thirdfile.txt
因此,在本例中,我希望脚本修改text.txt和secondfile.txt文件,而不是thirdfile.txt文件,因为相对路径不同。我的脚本如何访问目录中的文件夹,以及如何比较相对路径?我已经设法对目录中的文件(而不是文件夹)执行了我想要的操作,而且我不知道如何比较相对路径,即使我四处搜索也找不到它

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

我不知道如何做[[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

以前这里有一个答案,我想回答,建议使用
shopt-s globstar
**
而不是
*

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

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


编辑:

您也不需要cd“$1”,因为目录“$1”中不存在“$1”和“$2”。尝试以下几点:

#!/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

非常感谢。我对**的工作原理有点困惑。这意味着我不必再检查文件是文件还是目录,所以在我的例子中,它只需通过比较$1/$I和$2/$I来检查找到的文件是否具有相同的相对路径,对吗?正确。您不需要递归到“check”中,因为
***
会为您执行此操作。请您看一下我将要添加到原始帖子中的代码片段,好吗?以防万一我把事情搞砸了。我马上就做。编辑-完成循环现在可以工作了。
stat
调用需要一个
-c
。该文件将需要一个额外的
fi
和一个
done
。但总的要点对我来说似乎是正确的。非常感谢:)!