Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Чисто производственный скриптик / 17 сообщений из 17, страница 1 из 1
24.04.2009, 15:57:17
    #35952941
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
Дано множество файлов типа:

Код: plaintext
1.
coi_20090412_0000-20090413_0000_all.out.zip
coi_20090413_0000-20090414_0000_all.out.zip

Необходимо их распаковать в текущей директории и к полученному множеству файлов (*.out) добавить префикс "dc-".

Должно быть что-то вроде

Код: plaintext
1.
dc-coi_20090413_0000-20090414_0000_all.out
dc-coi_20090412_0000-20090413_0000_all.out

Написал скриптик:

Код: plaintext
1.
2.
3.
4.
5.
6.
for %%i in (*.zip) do (
  echo y | unzip %%i
)

for %%i in (*.out) do (  
  rename "%%i" "dc-%%i" 
)

Результат - удивительный. Получается следующее:

Код: plaintext
1.
dc-coi_20090413_0000-20090414_0000_all.out
dc-dc-coi_20090412_0000-20090413_0000_all.out
...
Рейтинг: 0 / 0
24.04.2009, 17:14:18
    #35953174
Kew
Kew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
второй for:
Код: plaintext
1.
2.
for %%i in (coi*.out) do (  
  rename "%%i" "dc-%%i" 
)
?
...
Рейтинг: 0 / 0
24.04.2009, 17:57:38
    #35953271
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
Да. В нём проблема. После переименования файла итератор цикла плющит и он бегает не в той последовательности. В настоящий момент я сделал хитрый workaround таким образом.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
for %%i in (*.zip) do (
  echo y | unzip.exe %%i
)

dir *.out /b > list.txt

for /F %%i in (list.txt) do (  
  rename "%%i" "dc-%%i" 
)

del list.txt

Но решение мне не нравится из-за использования временного файла. Хотелось-бы как-то красивее.
...
Рейтинг: 0 / 0
24.04.2009, 18:36:08
    #35953350
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
mayton,

Код: plaintext
1.
unzip  -p xxxx >another_name
...
Рейтинг: 0 / 0
24.04.2009, 21:13:43
    #35953490
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
Мысль интересная. Только я не знаю сколько файлов может быть внутри одного архива.
...
Рейтинг: 0 / 0
24.04.2009, 21:22:37
    #35953497
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
кстати, в упор не понял зачем тебе первый цикл
Код: plaintext
1.
unzip *.zip 
работает замечательно
...
Рейтинг: 0 / 0
24.04.2009, 22:15:51
    #35953527
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
если религия позволяет юниксутилиты использовать
то так можно )))

файл rename.sh
Код: plaintext
1.
2.
3.
 
  f=`echo $ 1  | sed -e "s/^..//"`
  mv $ 1  ./dc-$f

использование его
Код: plaintext
1.
g:/bin/find  -type f -name *.out -print -exec sh rename.sh {} ;

недостаток - только в текущем каталоге работает
...
Рейтинг: 0 / 0
24.04.2009, 23:17:57
    #35953584
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
Религия позволяет. Unzip я и вытащил из юникстулзов. Думаю, от первого цикла избавлюсь.

Только не раньше понедельника...
...
Рейтинг: 0 / 0
24.04.2009, 23:54:34
    #35953604
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
пардон, начиная с текущего каталога.
файнд пойдет по дереву, но переименовать ниче не сможет нигде, кроме как в текущем.
...
Рейтинг: 0 / 0
26.04.2009, 00:45:53
    #35954342
Nikolay Kalmarskiy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
tchingiz,

В cygwin всё проще :-

Код: plaintext
1.
2.
find . -type f -name '*.out' ! -name 'dc-*.out' \
   -execdir /usr/bin/sh -c '/usr/bin/mv "`/usr/bin/basename "{}"`" "dc-`/usr/bin/basename "{}"`"' \;
...
Рейтинг: 0 / 0
26.04.2009, 01:03:59
    #35954352
Nikolay Kalmarskiy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
Ну если опции -excecdir нет, то можно и по старинке, так сказать :-


+
юниксовый find (!GNU)
Код: plaintext
1.
2.
find . -type f -name *.ro ! -name 'menu*.*' \
-exec /usr/bin/sh -c '(cd "`/usr/bin/dirname "{}"`" && echo /usr/bin/mv "`/usr/bin/basename "{}"`" "dc-`/usr/bin/basename "{}"`")' \;
...
Рейтинг: 0 / 0
26.04.2009, 01:05:35
    #35954353
Nikolay Kalmarskiy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
echo лишнее...
...
Рейтинг: 0 / 0
26.04.2009, 23:43:22
    #35954943
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
в униксутилитах find выдает директории в стиле винды, то есть бакслеш вместо слеша.
а потом базенаме его не понимает
...
Рейтинг: 0 / 0
27.04.2009, 07:15:41
    #35955057
Nikolay Kalmarskiy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
tchingiz,

Это зря они так find испортили. Лучше уж тогда cygwin (IMHO)...
...
Рейтинг: 0 / 0
27.04.2009, 07:31:03
    #35955072
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
что интересно, dirname вполне понимает ))))))))
...
Рейтинг: 0 / 0
27.04.2009, 11:43:33
    #35955534
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
Всем спасибо. Скриптик в первой второй реализации уже работает в промышленном режиме. Переписывать под cygwin пока не буду.

Тему можно закрыть.
...
Рейтинг: 0 / 0
09.06.2009, 03:44:52
    #36032220
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто производственный скриптик
Nikolay Kalmarskiy,
с cygwin (а не под) оказалось еще проще

автор
G:\bin\cygwin\bin\ls -1 co*.out | xargs --verbose -n 1 -i{} mv {} dc-{}


а в юниксутилах так в связи с lf-lr не получается
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Чисто производственный скриптик / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]