распаковка zip архивов (каждый в свою папку)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

savik
Сообщения: 6
ОС: убунту 10.04

Re: распаковка zip архивов

Сообщение savik »

Код: Выделить всё

#!/bin/sh -ef
IFS='
'
echo "$*" | xargs -d'\n' -L1 unrar x -o- -or

Не перезаписывает и переименовывает дубликаты.
Спасибо.
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: распаковка zip архивов

Сообщение sgfault »

Я тут подумал еще про ваш вопрос
savik писал(а):
13.02.2012 14:26
И всё равно интересно что нижняя строчка делает, в частности: xargs -IREPL

и про ваши комменты к первому скрипту.. В общем, если выкинуть дурацкую теорию, то получится как-то так

Код: Выделить всё

$ printf "A\nB\nC\n" | xargs -L1 echo tREPLq
tREPLq A
tREPLq B
tREPLq C

сравните с

Код: Выделить всё

$ printf "A\nB\nC\n" | xargs -L1 -IREPL echo tREPLq
tAq
tBq
tCq

В качестве аргумента для '-I' может быть любая строка. Совпавшая с ней подстрока в аргументах команды будет заменена на текущую строку из входного потока (stdin). Кроме того, '-I' подразумевает '-L1' (входной поток читается по одной строке за раз), и разделителем аргументов считается новая строка (немного более подробно xargs arguments separator and escapes).

Что касается IFS, то опять же если выкинуть дурацкую теорию, получится как-то так:

Код: Выделить всё

$ ( IFS=' '; v='a b,c d'; set $v; for s; do echo "$s"; done )
a
b,c
d

сравните с

Код: Выделить всё

$ ( IFS=','; v='a b,c d'; set $v; for s; do echo "$s"; done )
a b
c d

Те значение переменной v после подстановки разбивается на несколько слов по символам, указанным в IFS. Это работает только, если подстановка значения v записана не в двойных кавычках (for без in краткая запись для for s in "$@").
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: распаковка zip архивов

Сообщение t.t »

Bizdelnick писал(а):
13.02.2012 13:34
Значит, привет от Рошаля...
Тогда так: for archive in *.rar ; do unrar "$archive" ; done
Да это не только у Рошаля так:

Код: Выделить всё

t $ { man 7z; man unzip; } | grep -A1 SYNOPSIS
SYNOPSIS
       7z [adeltux] [-] [SWITCH] <ARCHIVE_NAME> <ARGUMENTS>...
--
SYNOPSIS
       unzip   [-Z]   [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]]  file[.zip]  [file(s) ...]   [-x xfile(s) ...]
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: