LINUX.ORG.RU

изменение имени рекурсивно.

 


0

1

Есть папка /backup В папке много подпапок ( уровень вложенности ~7-8 директорий ) Внутри много файлов вида:

1_hz-2013-10-16.tar.gz
admin-1_full-2013-10-16.tar.gz
3_sleepnow-2013-10-16.tar.gz
mysql-20131016.tar.gz
1_hetzner-2013-10-16.zip

как вы поняли - это бекапы. Задача стоит такая - что бы эти файлы пришли к общему виду типа 2013-10-16.tar.gz

Рекурсивно.

Можно по идее обрезать все, кроме 10 символов перед .tar.gz как это сделать? Что бы во всех уровнях вложенности /backup так было) спасибо!



Последнее исправление: cetjs2 (всего исправлений: 3)

Если плясать от того что есть 4 цифры + 2 + 2, и кроме расширения в имени нет точек, то как-то так.

#!/bin/bash
BCK_LIST="/any/path/to/log.list"
FIND_DIR="$1"
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # test
echo -e "/some/path/admin-1_full-2013-10-16.tar.gz\n/some/sub/path/mysql-20130421.tar.gz\n/other/pth/1_hetzner_some_TEXT-2013-10-16.zip"| \
while read -r P;do
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # exec
# find "${FIND_DIR}" -type f \( -name "*.zip" -or -name "*.tar.gz" \) | while read -r P;do

  FILE_DIR="${P%/*}"
  REAL_NAME="${P##*/}"
  EXTNS="${P#*.}"
  NEW_NAME=`grep -Eo "[[:digit:]]{4}.*[[:digit:]]{2}"<<<"${REAL_NAME}"`
  NEW_NAME=`sed -r 's/.{4}/&-/;s/.{7}/&-/;s/:$//'<<<"${NEW_NAME//[!0-9]}"`
  echo -e "${P} \t >> \t ${FILE_DIR}/${NEW_NAME}.${EXTNS}"                # Тестовый пуск
  # echo -e "${P} ${FILE_DIR}/${NEW_NAME}.${EXTNS}" >> "${BCK_LIST}"      # Записать лог перемещений
  # mv ${P} {FILE_DIR}/${NEW_NAME}.${EXTNS}                               # << На свой страх и риск :3
done
/some/path/admin-1_full-2013-10-16.tar.gz        >>      /some/path/2013-10-16.tar.gz
/some/sub/path/mysql-20130421.tar.gz             >>      /some/sub/path/2013-04-21.tar.gz
/other/pth/1_hetzner_some_TEXT-2013-10-16.zip    >>      /other/pth/2013-10-16.zip

Ну там указать путь к логу перемещения, что раскоментировать, что закоментировать для запуска, думаю ясно.

Umberto ★☆
()
Последнее исправление: Umberto (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.