我有這種情況,需要將包含模板目錄的文件和鏈接(!) - 以遞歸方式複製到目標目錄,並保留所有屬性。模板目錄包含任意數量的佔位符(__NOTATION__
),需要將其重命名爲某些值。如何複製包含佔位符的目錄結構
例如模板看起來是這樣的:
./template/__PLACEHOLDER__/name/__PLACEHOLDER__/prog/prefix___FILENAME___blah.txt
目標變成這樣:
./destination/project1/name/project1/prog/prefix_customer_blah.txt
我試了一下,到目前爲止是這樣的:
# first create dest directory structure
while read line; do
dest="$(echo "$line" | sed -e 's#__PLACEHOLDER__#project1#g' -e 's#__FILENAME__#customer#g' -e 's#template#destination#')"
if ! [ -d "$dest" ]; then
mkdir -p "$dest"
fi
done < <(find ./template -type d)
# now copy files
while read line; do
dest="$(echo "$line" | sed -e 's#__PLACEHOLDER__#project1#g' -e 's#__FILENAME__#customer#g' -e 's#template#destination#')"
cp -a "$line" "$dest"
done < <(find ./template -type f)
但是,我意識到,如果我想關心權限和鏈接,這將是無止境的,非常複雜。有沒有更好的方法可以用「值」替換__PLACEHOLDER__,也許使用cp
,find
或rsync
?
我也想過這個解決方案,這對我來說實際上是可行的。但我注意到,我將不得不從「從左到右」移動目錄。因爲例如mv ./template/__PLACEHOLDER__/name/__PLACEHOLDER__/prog/prefix___FILENAME___blah.txt ./destination/project1/name/project1/prog/prefix_customer_blah.txt導致「沒有這樣的文件或目錄」錯誤。 – g000ze
這就是'-depth'的意義所在。 – ams
的確如此。謝謝!將嘗試並回來。 – g000ze