Переименовать файл в папке в зависимости от наличия другого файла [закрыто]

-2
26.05.2017, 18:20
2 ответа

С bash :

#!/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
0
28.01.2020, 05:17
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. Аналогично для другого случая.

0
28.01.2020, 05:17

Теги

Похожие вопросы