다른 파일이 있는지에 따라 폴더의 파일 이름 바꾸기

다른 파일이 있는지에 따라 폴더의 파일 이름 바꾸기

현재 제가 가지고 있는 시나리오는 폴더가 여러 개 있고 각 폴더에 트래픽 유형(예: 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으로 찾고 , 모아진 이름을 모아서 명령으로 보내는 명령을 설정했습니다 . 내부에서는 명령줄 인수를 반복하고 존재 여부를 찾는 루프를 설정합니다. 이 경우 cpu.csv의 이름은 cpu_http.csv로 변경됩니다. 다른 경우에도 마찬가지입니다.filescpu.csvshshforshhttp.csv

관련 정보