【发布时间】:2015-12-06 14:54:07
【问题描述】:
我正在尝试构建一个 bash 脚本,该脚本能够比较作为参数 $1 和 $2 给出的两个目录,并将第二个目录中的文件时间戳(如果它们与给定时间戳 $3 不同)更改为与第一个目录中的同名文件。我对此做得很好,但我看不到如何访问给定目录中的文件夹,并比较这些文件夹中的文件。
例如,如果我将 Directory1 和 Directory2 作为参数给出:
目录 1 包含:
-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
【问题讨论】: