powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Чисто производственный скриптик
17 сообщений из 17, страница 1 из 1
Чисто производственный скриптик
    #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
Чисто производственный скриптик
    #35953174
Kew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
второй for:
Код: plaintext
1.
2.
for %%i in (coi*.out) do (  
  rename "%%i" "dc-%%i" 
)
?
...
Рейтинг: 0 / 0
Чисто производственный скриптик
    #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
Чисто производственный скриптик
    #35953350
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Код: plaintext
1.
unzip  -p xxxx >another_name
...
Рейтинг: 0 / 0
Чисто производственный скриптик
    #35953490
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мысль интересная. Только я не знаю сколько файлов может быть внутри одного архива.
...
Рейтинг: 0 / 0
Чисто производственный скриптик
    #35953497
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, в упор не понял зачем тебе первый цикл
Код: plaintext
1.
unzip *.zip 
работает замечательно
...
Рейтинг: 0 / 0
Чисто производственный скриптик
    #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
Чисто производственный скриптик
    #35953584
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Религия позволяет. Unzip я и вытащил из юникстулзов. Думаю, от первого цикла избавлюсь.

Только не раньше понедельника...
...
Рейтинг: 0 / 0
Чисто производственный скриптик
    #35953604
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон, начиная с текущего каталога.
файнд пойдет по дереву, но переименовать ниче не сможет нигде, кроме как в текущем.
...
Рейтинг: 0 / 0
Чисто производственный скриптик
    #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
Чисто производственный скриптик
    #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
Чисто производственный скриптик
    #35954353
Фотография Nikolay Kalmarskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
echo лишнее...
...
Рейтинг: 0 / 0
Чисто производственный скриптик
    #35954943
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в униксутилитах find выдает директории в стиле винды, то есть бакслеш вместо слеша.
а потом базенаме его не понимает
...
Рейтинг: 0 / 0
Чисто производственный скриптик
    #35955057
Фотография Nikolay Kalmarskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingiz,

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

Тему можно закрыть.
...
Рейтинг: 0 / 0
Чисто производственный скриптик
    #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]