Видео ролики бесплатно онлайн

Смотреть казахский видео

Официальный сайт e-rus 24/7/365

Смотреть видео бесплатно

WeLinux.ru

24.05.09 06:37Kraplax

На заказНужен скрипт для копирования файлов по списку из файла

Так как существует такой блог, значит есть добровольцы, которые его создали. А это значит что есть шанс получить здесь помощь ;-)

Предыстория


Некоторым не нравится способ распространения программ KDE на Windows. Все дело в том, что в нем используется принцип репозиториев, как и в Linux. Однако многим было бы удобнее скачать установщик того же Amarok одним файлом и поставить только его в отдельную от KDE папку. Это все реализуемо, конечно, если делать через тот же установщик и просто установить в другую папку, но тут есть два аспекта - офф-лайн режим все еще в тестовой стадии, а зависимости тянутся целыми пакетами. А для создания установщика самое главное - это собрать все файлы, которые используются приложением и упаковать их. Для создания списка используемых файлов была взята утилита Process Monitor. Логи сохранены в файл и... собственно тут подходим к сути.

Суть


Нужен скрипт, который бы читал построчно файл, в котором несколько тысяч строк (множественные дубликаты), каждая строка - полный путь к папке или файлу. Скрипт должен копировать файл в указанную директорию с воссозданием иерархии файлов и папок.
Основные моменты, которые следует учесть:
  • файлы повторяются, потому нужна проверка на существование файла/папки в пункте назначения
  • файл из списка может отсутствовать - нужна проверка на существование в исходном виде
  • файлы и папки должны повторять иерархию. Если в списке будет файл C:\KDE\share\icons\oxygen\16x16\actions\foo.png, то копироваться он должен в D:\CUSTOM_ROOT\share\icons\oxygen\16x16\actions\foo.png, а не просто D:\CUSTOM_ROOT\foo.png!
    Не стоит заморачиваться с начальной частью полного пути файла в списке исходных файлов - в любом текстовом редакторе можно сделать замену того же C:\Program files\KDE на что-то вроде KDEROOT для более удобной работы скрипта
  • язык скрипт может быть любой - питон, яваскрипт, VBскрипт, Bash, Batch - все что угодно, я найду способ его запустить (Barinfuck не предлагать :P)
  • такие параметры как корневая папка KDE или папка назначения могут быть, что называется, hardcoded, если вам так удобно, но все же приветствуется хотя бы какая-то возможность подстановки своих значений

Скриптописатель из меня не очень-то хороший, в жабере друзей таких же тоже немного, поэтому решил что здесь будет удобнее спросить. Если считаете тему неуместной - минусуйте. Готовый скрипт, наверное, лучше выкладывать в блоге Скрипты на bash (если скрипт действительно будет на bash), или кидать мне в личку/мыло/жабер (для потомков я его все равно к этому посту потом прилеплю).
+3
xcr24.05.09 10:37# +3
Как мне кажется, это не очень сложно.
uniq - подает на вывод очищенный от повторений ввод
sed -e "s/^$OLDPATH\(.*\)/\1/" - даст относительные пути по абсолютным
тогда все вместе будет выглядеть как-то так:

1
2
3
4
5

$OLDPATH="\/usr\/"
$NEWPATH="\/home\/user\/"
for file in `cat files.log | uniq | sed -e "s/^$OLDPATH\(.*\)/\1/"`; do
cp "$OLDPATH"$file "$NEWPATH"$file; done


Пока не проверял. Тут есть пара узких мест:
1) Нужно, чтобы sed получил пути $OLDPATH и $NEWPATH уже экранированными, как я и сделал. Кстати, cp экранированные пути вроде понимает.
2) Структура директорий не создается. Для этого лучше сделать отдельный скрипт с использованием всё того же uniq | sed -e "..." и mkdir -p
3) У винды, мб, есть своя специфика.
Сорри, сейчас доделать возможности нет - сессия подкралась )
xcr24.05.09 10:56# +3
Чтоб создавать папки:
for folder in `cat files.log | uniq | sed -e "s/^$OLDPATH\(.*\)/\1/" | sed -e "s/^\(\(.*\/\)*\)[^\/]*$/\1/" | uniq`; do mkdir -p "$NEWPATH"$folder; done

Или как-то так. Опять же, с виндой придется переиначить немного - все экранированные слеши поменять на экранированные бэкслеши.
Kraplax24.05.09 18:47# +0
А эти два куска как запускать? по очереди? и какой тут первым лучше?
Нельзя ли обьединить их под одной крышкой?
xcr24.05.09 18:52# +2
Сначала структуру директорий создать (то есть второй), потом - скопировать файлы (то есть первый). И, да, во втором скрипте тоже должно быть объявление переменных.

Можно загнать и в один скрипт. Тогда сначала должно быть объявление переменных, потом - создание директорий, потом - копирование файлов.

Алсо, я не уверен, что оно работает так, как надо: это всего лишь эскиз.
Kraplax24.05.09 19:08# +0
Даже за это уже спасибо. Если еще разберусь с принципом работы (у меня тяжко с регулярными выражениями разного рода), то вообще будет расчудесно.
cppmm25.05.09 09:21# +1
Написать, конечно, можно, но зачем столько проблем?
Не проще ли предварительно сжать всё в архив tar'ом, используя KDE_ROOT в качестве корня, а потом точьно так же всё установить? Это стандартный, проверенный метод, используемый во всех пакетных менеджерах и инсталляторах. И работать это будет быстрее, чем обработка тысяч строк текстового файла, со всякими заменами и отдельными созданиями директорий/копирования файлов.

Top блогов (все)
Топ пользователей Топ блогов
Топ пользователей Топ блогов
Top пользователей (все)
Топ пользователей Топ блогов
В сети: Username, xT, zivot_je_cudo

Новенькие: tumick, 4zzy, flycat, evgenyl, adept
welinux.ru
Идея сайта exelens; Движок 0byte, разработчик nvbn; Дизайн - Astramak

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн