xargs: запуск команды один раз со всеми аргументами

xargs: запуск команды один раз со всеми аргументами

Моя цель — получить список файлов, которые были изменены в git, а затем запустить rspecкоманду, передавая каждый файл в качестве аргумента.

На данный момент у меня есть:

$ git status -s | awk '{if ($1 == "M") print $2}' | tr "\\n" "\\0" | \
    xargs -0 -I % rspec -f documentation %

Технически это работает, но это выполняется rspecдля каждого измененного файла, я хочу, чтобы это выполнялось:

$ rspec path/to/file/1 path/to/file/2 ...

Кто-нибудь знает, как этого добиться?

решение1

... | xargs -0 rspec -f documentation 

Обратите внимание, что это может вызываться rspecнесколько раз, если командная строка будет слишком длинной. Это не проблема, rspecтак как причина вызывать его один раз — производительность, но не используйте его для чего-то, xargs -0 tar cf archive.tarгде любой второй, третий, ... запуск создаст архив, перезаписывающий вывод предыдущих запусков.

Связанный контент