根據另一個檔案的存在重命名資料夾中的檔案

根據另一個檔案的存在重命名資料夾中的檔案

我目前的場景是,我有多個資料夾,每個資料夾都有流量類型(如 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。對於其他情況也是如此。

相關內容