Переименование файлов

Автор astratek, 23 июня 2014, 12:33:59

« назад - далее »

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

astratek

Кому интересно, есть небольшая задачка!

Дано:
Три каталога с файлами.

С торрентов стянуто две раздачи
В первом каталоге 70 файлов (то что скачано с 1 раздачи)
Во втором каталоге 40 файлов (то что скачано со 2 раздачи)

В третьем каталоге собраны 100 файлов, из двух предыдущих каталогов.
Файлы были переименованы и выложены на другой торрент.

По каким либо причинам, третий каталог был потерян.
Файлы восстановлению не подлежат!!!

Необходимо, восстановить третий каталог в первозданном виде, чтобы по новой не скачивать ничего!!!
Восстановить название файлов, думаю можно будет только по размеру файла.

Graf

По размеру не получится, он может быть одинаков.
Я так понимаю имена файлов в третьем каталоге не соответствуют тем, что в двух?
Если бы соответствовали, можно было бы восстановить список и размер с третьей торент раздачи в какой-нибудь файл. Этот файл использовать в качестве списка для сравнения в скрипте. А там тока цикл и проверка на "равно" и "не равно", если "равно" кидаем в третий каталог..., как-то так, если я все правильно понял :)

astratek

В данном случае по размеру наверно лучше, то что размер файла может быть одинаков можно не учитывать, да и вероятность мала.
Можно восстановить список файлов с их размерами из раздачи.
>> Я так понимаю имена файлов в третьем каталоге не соответствуют тем, что в двух?
верно!

вот примерное содержание файла со списком и размеров файлов из третьего каталога

    363    1\file.txt
    4096    1\ledisk
    134188    2\no-duc-linux.tar.gz
    175491529    2\setup 8.19.zip
    1403932232    setup 18.90.zip_


Graf

Получилось как-то так...
Исправления и оптимизация приветствуются.

#!/bin/sh

SOURCE_DIR="./1/"                # с какого каталога берем существующие размеры и файлы
DIST_DIR="./3/"                  # в какой каталог будем все копировать
SOURCE_FILE="./file_list.txt"    # файл со списком потерянных файлов и их размеров (с чем будем сравнивать), в формате "размер имя"

# заполняем массив area размерами и именами файлов полученными при помощи ls
# четная ячейка - размер
# не четная - имя файла

area=(`ls -og $SOURCE_DIR | awk '{$1=$2=$4=$5=$6="";print $0}'`)

# запускаем цикл пока не кончатся все ячейки
for (( n_size=0; n_size<${#area[*]}; n_size=n_size+2 ))
do
   r_size=${area[$n_size]}    # присваиваем переменной значение равное размеру
   n_name=${area[$n_size+1]}  # присваиваем переменной значение равное имени файла


# сравниваем размеры и если совпадают отдаем имя файла из списка переменной my_name с удалением первого пробела
   my_name=`awk '$1 == '$r_size' {$1=NULL;print $0}' "$SOURCE_FILE" | cut -c 2-`

# копируем
   cp $SOURCE_DIR"$n_name" $DIST_DIR"$my_name"

done


astratek

Спасибо,
будем пробовать