我目前的場景是,我有多個資料夾,每個資料夾都有流量類型(如 ftp.csv、http.csv 等)和指標(cpu.csv 和 memory.csv)。
資料夾1> cpu.csv http.csv
資料夾2> cpu.csv ftp.csv
由於所有資料夾中的指標檔案都具有相同的名稱,例如cpu.csv,我想將包含ftp.csv 的資料夾中的cpu.csv 重新命名為cpu_ftp.csv,並在http.csv 的資料夾中,我想移動cpu .csv 轉換為 cpu_http.csv
我想像下面的資料夾一樣移動1> cpu_http.csv http.csv
請幫我在 bash 腳本中實現?
答案1
和巴什:
#!/bin/bash
for d in /folder[0-9]*
do
type="" # traffic type (either `http` or `ftp`)
if [ -f "$d/ftp.csv" ]; then # check if file `ftp.csv` exists within a folder
type="ftp"
elif [ -f "$d/http.csv" ]; then # check if file `http.csv` exists within a folder
type="http"
fi
# if `traffic type` was set and file `cpu.csv` exists - rename the file
if [ ! -z "$type" ] && [ -f "$d/cpu.csv" ]; then
mv "$d/cpu.csv" "$d/cpu_$type.csv"
fi
done
答案2
find . -type f -name cpu.csv -exec sh -c '
for f
do
[ -f ${f%/*}/http.csv ] && { mv "$f" "${f%.???}_http.csv"; :; } \
|| \
[ -f ${f%/*}/ftp.csv ] && mv "$f" "${f%.???}_ftp.csv"
done
' sh {} +
我們設定一個find
命令,該命令files
從當前目錄開始遞歸查找,並具有名稱cpu.csv
並收集並將收集到的名稱發送到該sh
命令。在裡面sh
我們設定了一個for
循環,它將迭代命令列參數sh
並尋找是否存在,http.csv
在這種情況下,cpu.csv 將被重新命名為 cpu_http.csv。對於其他情況也是如此。