Добрый день.
Задача: в папке лежат какие-то файлы, среди них набор файлов вида word01.zip, где вместо 01 стоят разные числа. Хочется с помощью unzip разархивировать их все, не делая это вручную, т.е. использовать ls | grep word | grep zip или конструкцию в этом роде. ls | grep word | grep zip | unzip почему-то не работает; буду благодарен за конкретную рекомендацию или хотя бы внятный мануал на тему.
Гугление всевозможных "using grep with pipe" не помогло.
Заранее спасибо.
А если сказать unzip -Z word*.zip ? Что получается?
for file in `ls | grep word`; do unzip $file; done
Vlad_W_1999
Выводят много строк вида "caution: filename not matched: word01.zip" про все файлы, которые соответствуют такой маске. Разархивирования при этом не происходит.
Soi-Fong
Тоже не получается. Ответ такой:
upd:
помогло такое:
Но всё ещё непонятно, почему не работает ls в кавычках, и как получить с помощью масок bash такой же вывод, как от
Странно, у меня вот такая команда нормально отработала:
$ for file in `ls | grep d`; do echo $file; done
downloads
sounds
video
ты кавычки правильные указывал? не вот такие ', а вот такие `, на букве ё?
или в данном случае аналогично следующее:
for file in $(ls | grep d); do echo $file; done
Под масками баша ты подразумеваешь так называемые wildcards? Боюсь для них это слишком сложный запрос, тут можно составить простое регулярное выражение для grep, все же лучше, чем 3 раза его вызывать.
man unzip все таки, в итоге:
различайте * в шеле, и экранированную * для прямой передачи на растерзание команды.
Вот оно! Благодарю за подсказку! У меня закралась нехорошая мысль, что звёздочка как-то не так интерпретируется.
Отправить комментарий