Назад | Перейти на главную страницу

Как перебирать список файлов и выполнять над ними действие

Я хочу написать сценарий (или, желательно, псевдоним), который выполняет следующие действия:

  1. Найдите все файлы, соответствующие шаблону *.jar
  2. Перебрать все эти файлы и запустить jar tvf <jar file name> | grep <Some argument>
  3. Распечатать, если jar содержит файл с именем, которое соответствует argument

Я работаю над tcsh и предпочел бы не открывать новую оболочку, поскольку я хочу, чтобы это было псевдонимом, а не скриптом - выполнимо ли это?

Прямой псевдоним не подойдет для этого приложения. Что-то вроде этого было бы близко, за исключением того, что вы получили бы результат grep, а не имя файла jar:

alias targrep="find . -name '*.jar' -exec jar tvf {} \; | grep"

targrep someterm

Чтобы получить имя файла, вы должны переключиться на использование функции вместо псевдонима, чтобы у вас был больший контроль над аргументами и тем, куда идут значения. (Примечание: формат bash, возможно, потребуется изменить для tcsh)

function jargrep () {
    find . -name '*.jar' | while read jar; do
        jar tvf $jar | grep -q  $@ && echo $jar
    done
}

jargrep someterm

Попробуйте что-нибудь вроде

find . -name '*.jar' -exec 'jar tvf | grep <some agrument>'

прочтите справочную страницу для получения более подробной информации.