переименование имен файлов, содержащих двоеточие, с помощью mv в linux - PullRequest
0 голосов
/ 10 марта 2020

Я знаю, что моя проблема кажется очень простой, но она заняла у меня один день и не повезло. Я проверил много других сообщений, но ни один из них не решил мою проблему. У меня есть несколько файлов

touch wrfchemi_d01_2010061500:00:00
touch wrfchemi_d01_2010061600:00:00
touch wrfchemi_d01_2010061700:00:00
touch wrfchemi_d01_2010061800:00:00

. Я хочу переименовать их в:

wrfchemi_d01_2010_06_15_00: 00: 00 wrfchemi_d01_2010_06_16_00: 00: 00 wrfchemi_d01_2010_06_17_00: 00 * 00_00: 00 * 00_01: 00: 00_01: 00: 00 * 00_01: 00: 00_01: 00: 00 * 00_01: 00: 00_01: 00: 00 * 00_01: 00: 00_01: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00 1007 * Я написал простой скрипт

for item in `ls wrfchemi*`
do
year=`echo "$item" | cut -c14-17`
mon=`echo "$item" | cut -c18-19`
day=`echo "$item" | cut -c20-21`
hr=`echo "$item" | cut -c22-23`
dat="wrfchemi_d01_"$year"_"$mon"_"$day"_"$hr":00:00"
echo $dat
mv $item "$dat"
done

Выдает эту ошибку

mv: невозможно переместить 'wrfchemi_d01_2010061500: 00: 00' в 'wrfchemi_d01_2010_06_15_00: 00: 00': такого файла нет или каталог

mv: невозможно переместить 'wrfchemi_d01_2010061600: 00: 00' в 'wrfchemi_d01_2010_06_16_00: 00: 00': нет такого файла или каталога

mv: невозможно переместить 'wrfchemi_d01_2010061700: 00: 00: в 'wrfchemi_d01_2010_06_17_00: 00: 00': нет такого файла или каталога

mv: невозможно переместить 'wrfchemi_d01_2010061800: 00: 00' в 'wrfchemi_d01_2010_06_18_00: 00: 00': нет такого файла или каталога

ОБНОВЛЕНИЕ:

ТАК странно. Это также терпит неудачу в терминале, тогда как файл действительно существует. Он автоматически добавляет «\» к нулям

 "mv wrfchemi_d01_2010061500\:00\:00 wrfchemi_d01_2010_06_15_00:00:00" 

, но все равно вызывает ошибку

Нет такого файла или каталога

Спасибо

1 Ответ

1 голос
/ 10 марта 2020

Используя rename:

rename 's/_(\d{4})(\d{2})(\d{2})/_$1_$2_$3_/' wrfchemi_d01_??????????:*

Используя :

for file in wrfchemi_d01_??????????:*;do
    mv "$file" "${file:0:17}_${file:17:2}_${file:19:2}_${file:21}"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...