С 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
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. Аналогично для другого случая.