Острота, чтобы выполнить процесс в текущем каталоге без вывода и отрицать его?

Да, find ./work -print0 | xargs -0 rm выполнит что-то как rm ./work/a "work/b c" .... Можно свериться echo, find ./work -print0 | xargs -0 echo rm распечатает команду, которая будет выполняться (кроме пробела, будет оставлен соответственно, хотя echo не покажет это).

Добираться xargs чтобы поставить имена в середине, необходимо добавить -I[string], где [string] то, что Вы хотите быть замененными аргументом, в этом случае Вы использовали бы -I{}, например. <strings.txt xargs -I{} grep {} directory/*.

То, что Вы на самом деле хотите использовать, grep -F -f strings.txt:

-F, --fixed-strings
  Interpret PATTERN as a  list  of  fixed  strings,  separated  by
  newlines,  any  of  which is to be matched.  (-F is specified by
  POSIX.)
-f FILE, --file=FILE
  Obtain  patterns  from  FILE,  one  per  line.   The  empty file
  contains zero patterns, and therefore matches nothing.   (-f  is
  specified by POSIX.)

Так grep -Ff strings.txt subdirectory/* найдет все случаи любой строки в strings.txt как литерал, если Вы отбрасываете -F опция можно использовать регулярные выражения в файле. Вы могли на самом деле использовать grep -F "$(<strings.txt)" directory/* также. Если Вы хотите практиковать find, можно использовать последние два примера в сводке. Если Вы хотите сделать рекурсивный поиск вместо просто первого уровня, у Вас есть несколько опций, также в сводке.

Сводка:

# grep for each string individually.
<strings.txt xargs -I{} grep {} directory/*

# grep once for everything
grep -Ff strings.txt subdirectory/*
grep -F "$(<strings.txt)" directory/*

# Same, using file
find subdirectory -maxdepth 1 -type f -exec grep -Ff strings.txt {} +
find subdirectory -maxdepth 1 -type f -print0 | xargs -0 grep -Ff strings.txt

# Recursively
grep -rFf strings.txt subdirectory
find subdirectory -type f -exec grep -Ff strings.txt {} +
find subdirectory -type f -print0 | xargs -0 grep -Ff strings.txt

Можно хотеть использовать -l опция получить просто название каждого файла соответствия, если Вы не должны видеть фактическую строку:

-l, --files-with-matches
  Suppress  normal  output;  instead  print the name of each input
  file from which output would normally have  been  printed.   The
  scanning  will  stop  on  the  first match.  (-l is specified by
  POSIX.)
3
21.01.2016, 21:01
2 ответа

Проблема состоит в том, что Вы используете обоих & и ; вместе. Они - и разделители команды и не могут использоваться одновременно. Вот Ваш зафиксированный пример:

( cd /opt/myprogram && ./myprocess.sh >/dev/null 2>&1 & disown )
11
27.01.2020, 21:09
  • 1
    я пробую команду на подобных строках: обманите ерунду-e-d сервис-fabrik ssh брокер-c "хвост-F /var/vcap/sys/log/service-fabrik-broker/service-fabrik-broker.log> /var/vcap/sys/log/service-fabrik-broker/error.log 2> &1 и отрицайте", но это, кажется, не работает. Какая-либо идея, что могло быть неправильным? Спасибо –  akskap 30.04.2018, 16:24

nohup утилита была разработана для в значительной степени, что Вы ищете:

Usage: nohup COMMAND [ARG]...
  or:  nohup OPTION
Run COMMAND, ignoring hangup signals.

If standard input is a terminal, redirect it from /dev/null.
If standard output is a terminal, append output to 'nohup.out' if possible,
'$HOME/nohup.out' otherwise.
If standard error is a terminal, redirect it to standard output.
To save output to FILE, use 'nohup COMMAND > FILE'.
1
27.01.2020, 21:09

Теги

Похожие вопросы