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


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

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

Оффлайн r0m@n

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

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15194
    • Просмотр профиля
    • aetera.net
Код: Bash
  1. #!/bin/bash
  2.  
  3. DIR_IN="input"
  4. DIR_OUT="output"
  5.  
  6. if [ ! -d "$DIR_IN" -o ! -d "$DIR_OUT" ]
  7. then
  8.     exit 1
  9. fi
  10.  
  11. find "$DIR_IN" -mindepth 1 -type f | while read FILE
  12. do
  13.     FILE_NAME=$(basename "$FILE")
  14.     unset FILE_SUFFIX
  15.     if [[ "$FILE_NAME" == *.* ]]
  16.     then
  17.         FILE_SUFFIX=".${FILE_NAME##*.}"
  18.     fi
  19.     mv "$FILE" "$DIR_OUT/$(date --date="$(stat --printf=%y "$FILE")" +%H:%M_%d-%m-%Y)$FILE_SUFFIX"
  20. done

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

http://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

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

Оффлайн r0m@n

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

Оффлайн ArcFi

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

Оффлайн _92

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

 

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