簡體   English   中英

比較bash腳本中的相對路徑

[英]Comparing relative paths in bash script

我正在嘗試構建一個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
}

而且我不知道該怎么做[[路徑檢查]],它應該檢查兩個文件是否具有相同的相對路徑(相對於作為參數給出的目錄)。

編輯:

如答案所示,以下代碼是正確的方法嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM