我需要您的幫助,以了解我如何結合一些操作來獲得預期的結果。所以我有以下路徑,其中有很多檔案:
/home/application/Upload_Actions/TestFiles/
現在,這些檔案具有以下名稱:
DATE20220703.2130_Network=MainPipeline,Action=Upload_File,Element=X988Schema_1000_statsfile.csv
我想要的是遍歷該檔案夾中的所有檔案,并將_其名稱中的:. 該檔案應如下所示:
DATE20220703.2130_Network=MainPipeline,Action=Upload_File,Element=X988Schema:1000_statsfile.csv
我已經寫了一小行,但我不太確定如何迭代符號 _ 的第 N 次出現。
for f in ./*statsfile*; do mv "$f" "${f//_/:}"; done
問題是它做了以下事情:來自:
/home/application/Upload_Actions/TestFiles/DATE20220703.2130_Network=MainPipeline,Action=Upload_File,Element=X988Schema_1000_statsfile.csv
To: (但它對 NO SUCH FILE 或 DIRECTORY 失敗,因為它替換了路徑中的 _)
/home/application/Upload:Actions/TestFiles/DATE20220703.2130_Network=MainPipeline,Action=Upload:File,Element=X988Schema:1000:statsfile.csv
我怎么能這樣做,只有 _ 符號的第 3 次出現被替換,以便路徑中的 _ 符號和標題中的第一個 _ 符號被單獨留下?預期成績:
/home/application/Upload_Actions/TestFiles/DATE20220703.2130_Network=MainPipeline,Action=Upload_File,Element=X988Schema:1000_statsfile.csv
作業系統版本:CENTOS 7
uj5u.com熱心網友回復:
如何從最后替換第二次出現?喜歡:
for file in ./*statsfile*; do
head=${file%_*_*}
tail=${file#"$head"_}
echo mv "$file" "$head:$tail"
done
洗掉echo以實際移動檔案。
uj5u.com熱心網友回復:
read使用with的純 bash 解決方案IFS=_將每個檔案名拆分為由 分隔的標記_:
cd /home/application/Upload_Actions/TestFiles/
for f in *statsfile*; do
IFS=_ read -r p1 p2 p3 last <<< "$s" &&
echo mv "$f" "${p1}_${p2}_${p3}:$last"
done
PS:用于echo除錯目的,您可以在驗證輸出后將其洗掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/515822.html
標籤:重击壳嘘
