Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: #bash скрипт переименования файлов по дате изменения  (Прочитано 4055 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн r0m@n

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Добрый день!
Товарищи, есть необходимость переименования файлов вне зависимости от расширения и исходного имени в имя вида hh:mm_dd-mm-yyyy с сохранением расширения или вроде того, в общем по дате редактирования. Файлы поступают в каталог example извне. Периодичность работы скрипта - каждые 15 мин.

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Код: (bash) [Выделить]
#!/bin/bash

DIR_IN="input"
DIR_OUT="output"

if [ ! -d "$DIR_IN" -o ! -d "$DIR_OUT" ]
then
    exit 1
fi

find "$DIR_IN" -mindepth 1 -type f | while read FILE
do
    FILE_NAME=$(basename "$FILE")
    unset FILE_SUFFIX
    if [[ "$FILE_NAME" == *.* ]]
    then
        FILE_SUFFIX=".${FILE_NAME##*.}"
    fi
    mv "$FILE" "$DIR_OUT/$(date --date="$(stat --printf=%y "$FILE")" +%H:%M_%d-%m-%Y)$FILE_SUFFIX"
done

Вот вам болванка.
Допиливайте.

https://help.ubuntu.ru/wiki/cron
« Последнее редактирование: 28 Октября 2014, 20:20:52 от ArcFi »

Оффлайн r0m@n

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Спасибо, большое!

Пользователь решил продолжить мысль [time]28 Октябрь 2014, 16:08:46[/time]:
Не могу разобрать код
    #!/bin/bash
     
    DIR_IN="/home/dir1"
    DIR_OUT="/home/dir2"
    find "$DIR_IN" -mindepth 1 | while read FILE
    do
        mv "$FILE" "$DIR_OUT/$(date --date="$(stat --printf=%y "$FILE")" +%H:%M_%d-%m-%Y).${FILE##*.}"
    done

При его использовании вылетает ошибка
mv: невозможно переместить «/home/dir1/g» в «/home/dir2/13:54_28-10-2014./home/dir1/g»: Нет такого файла или каталога
mv: невозможно переместить «/home/dir1/с» в «/home/dir2/13:54_28-10-2014./home/dir1/с»: Нет такого файла или каталога
mv: невозможно переместить «/home/dir1/b» в «/home/dir2/13:54_28-10-2014./home/dir1/b»: Нет такого файла или каталога
Помогите, если не трудно.
« Последнее редактирование: 28 Октября 2014, 15:24:21 от r0m@n »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
r0m@n, добавил проверку каталогов, поправил процедуру получения расширения.

Оффлайн r0m@n

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Спасибо! Нереально классно работает) Так удобно!!! Посоветуйте, что почитать мозгу для понимания и генерации подобного кода? В личку, пожалуйста.
« Последнее редактирование: 02 Ноября 2014, 18:36:47 от r0m@n »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Секретов тут нет.
Самый полный гайд по Bash:
http://www.opennet.ru/docs/RUS/bash_scripting_guide/
:coolsmiley:

Оффлайн _92

  • Любитель
  • *
  • Сообщений: 90
  • puppyrus.org
    • Просмотр профиля
    • 10021987.ru
что нужно добавить в скрипт, чтоб не перезаписывались файлы
т.е. если два файла с одинаковым временем, то добавлять, к примеру, "_1", "_2", .. в конец имени
g4600 + ssd + ddr4

 

Страница сгенерирована за 0.063 секунд. Запросов: 25.