В bash вы можете расширить команду, выполнив следующие действия:
history -p !23
Итак, если в 23 у вас есть ls -l the, возврат будет:
ls
-l
В zsh я могу воспроизвести подобное (, но не идентичное )поведение, сделав это:
history 23 23 | xargs -n1 | tail -n+2
Использование квалификаторов zsh glob , предполагая, что пакеты являются каталогами.
Во-первых, вот как искать каталоги пакетов в любом месте текущего каталога:
print -rC1 -- **/*.bundle(/N)
**/…
соответствует файлам во вложенных подкаталогах. (/)
ограничивает совпадения каталогами.(N)
приводит к пустому списку вместо ошибки, если совпадений нет. Затем отфильтруйте результаты, чтобы сохранить только пакеты без PNG_.zip
в любом месте:
print -rC1 -- **/*.bundle(/Ne['()(($#==0)) $REPLY/**/PNG_.zip(NDY1)'])
(e['…'])
фильтрует совпадения, :сохраняются только те, для которых выражение истинно. Код выполняется для каждого совпадения по очереди, при этом для совпадения устанавливается $REPLY
. ()(($#==0)) …
проверяет, расширяется ли …
до списка слов с длиной 0, т.е. если…
(как список слов )пуст. (Y1)
— это оптимизация, позволяющая прекратить обход каталога, как только будет найдено 1 совпадение.(D)
(dotglob
)также должен искать PNG_.zip
файлы в скрытых подкаталогах каталогов пакетов. Верю:
$ find. -type f \( ! -iname "*PNG_.zip*" \)
Делает свое дело. ! оператор инвертирует шаблон поиска. Таким образом, вы получаете все файлы, которые не соответствуют ему.