попробуйте эту операцию и адаптируйте ее к своей ситуации:
now = $ (date + "% m_% d_% Y ")
file =" / nas / backup_ $ now.sql "
поэтому должно работать: для f в / path; do mv -n "$ f" "$ {f} _RBS _ $ (date +"% m_% d_% Y ")"; выполнено
Во-первых, команда mv
принимает источник и пункт назначения, вы же предоставляете только один.
Следующий момент - формат даты, согласно вашей информации вы хотите %Y для года, %m для месяца и %d для дня, смотрите man date
для объяснения различий между последовательностями.
Третий момент заключается в том, что вы указываете только путь (for f in /path
), а не ссылаетесь на файлы (for f in /path/*
). Таким образом, рабочим примером будет:
for f in /path/*; do mv -n "$f" "${f}_$(date -r "$f" +'%Y%m%d')"; done
Это лучший способ сделать это.
Вот сценарий для добавления даты создания файла для n файлов в заданном каталоге.
#!/bin/bash
path="/home/modassir/data/"
listoffiles=$(ls -1 /home/modassir/data)
for f in $listoffiles; do
file=$(date -r $path$f +'%d%m%Y-%H:%M:%S')
mv $path''$f'' $path''$f''_rbc_''$file''
done;
/ home / modassir / data
- это имя каталога
У вашей команды есть несколько проблем:
for f in /path ; do mv -n ""$f"_RBS_(date -r "$f" +"%Y%M%D")"; done
for f in /path
пройдет только один раз по циклу (с f
= /path
). Вероятно, вы хотите, чтобы for f in /path/*
рассматривал каждый файл в каталоге /path/
(если вы хотите рассматривать файлы в подкаталогах, это совсем другой вопрос).
mv
требует два аргумента. Источником, очевидно, является "$f"
. Место назначения должно быть преобразованным именем.
Вы пропустили $
в подстановке команды $(...)
.
Строка формата для date
не соответствует вашему описанию (и вы, вероятно, хотите месяц и день, а не минуту и короткую дату)
Вы используете дату модификации, а не дату создания (которая не сохраняется в большинстве типов файловых систем). Я оставлю это как есть.
Ваше описание подразумевает, что вы хотите, чтобы имя файла было в нижнем регистре.
Исправив все вышесказанное (кроме выбора даты), мы получаем
for f in /path/* ; do mv -n "$f" "${f,,}_rbc_$(date -r "$f" +'%d%m%Y')"; done
Еще одна вещь, которую следует учесть: если вы делаете это более одного раза в одном и том же месте, возможно, вам захочется переместить файлы в другой каталог или проверить, есть ли у них уже подходящий суффикс (либо удалить его перед добавлением нового, либо просто оставить такие файлы нетронутыми).