[英]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.