Add modification time to the filename [duplicate]

0
23.03.2017, 18:28
4 ответа

попробуйте эту операцию и адаптируйте ее к своей ситуации: now = $ (date + "% m_% d_% Y ") file =" / nas / backup_ $ now.sql "

поэтому должно работать: для f в / path; do mv -n "$ f" "$ {f} _RBS _ $ (date +"% m_% d_% Y ")"; выполнено

0
28.01.2020, 05:05

Во-первых, команда 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
1
28.01.2020, 05:05

Это лучший способ сделать это.

Вот сценарий для добавления даты создания файла для 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 - это имя каталога

-3
28.01.2020, 05:05

У вашей команды есть несколько проблем:

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

Еще одна вещь, которую следует учесть: если вы делаете это более одного раза в одном и том же месте, возможно, вам захочется переместить файлы в другой каталог или проверить, есть ли у них уже подходящий суффикс (либо удалить его перед добавлением нового, либо просто оставить такие файлы нетронутыми).

1
28.01.2020, 05:05

Теги

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