Измените шаблон таким образом, чтобы он представлял собой регулярное выражение, которое не будет соответствовать буквальному тексту.
ps -ef | grep [s]shd
Я не уверен, что это то, что вы ожидали, но в мире BSD (, таких как macOS)-I
и -J
, различается способ передачи нескольких «строк» в команду. Пример:
$ ls
file1 file2 file3
$ find. -type f -print0 | xargs -I % rm %
rm file1
rm file2
rm file3
$ find. -type f -print0 | xargs -J % rm %
rm file1 file2 file3
Таким образом, с -I
xargs будет запускать команду для каждого переданного ему элемента отдельно. С -J
xargs выполнит команду один раз, объединит все элементы и передаст их как аргументы вместе.
Некоторые команды, такие как rm
или mkdir
, могут принимать несколько аргументов и работать с ними так же, как если бы вы передали один аргумент и выполнили их несколько раз. Но некоторые приложения могут меняться в зависимости от того, как вы передаете им аргументы. Например tar
. Вы можете создать tar-файл, а затем добавить в него файлы, или вы можете создать tar-файл, добавив в него все файлы за один раз.
$ find. -iname "*.txt" -or -iname "*.pdf" -print0 | xargs -0 -J % tar cjvf documents.tar.bz2 %