Использование хвоста -f вместе с sed и xargs

Вам нужно сделать две вещи:

1 )файлов в sourceне вtarget:

 mv -n "$source"/* $target

-nпредотвращает перезапись, если цель существует, поэтому вы копируете все, а mv -nпроверит существование за вас

2 )файла в targetс идентичным файлом в source, удалить файл вsource

 for tgt in $target/* ; do src="$source"/$(basename "$f") ; cmp "$tgt" "$src" && rm "$src" ; done

cmpвозвращает 0 (true, для bash ), если файлы идентичны, 1 (false ), если они разные, поэтому bash оценивает только первый член &&, если он ложен(false && anythingis всегда false )и не будет выполнять rm, если файлы разные.

0
05.07.2020, 12:02
2 ответа

Возможно

tail -f /tmp/test | sed "s/['\"]//g" | while read line; do
  do_something "$line"
done

И проверьте это:https://stackoverflow.com/questions/199266/make-xargs-execute-the-command-once-for-each-line-of-input

1
18.03.2021, 23:21

Есть несколько вещей.

Первый :"хвост -f" никогда не завершится, поэтому "xargs" также будет работать бесконечно. Вы можете открыть второе окно, чтобы «убить -HUP» процесс «tail -f», чтобы завершить как «tail -f», так и «xargs», и, таким образом, произвести вывод.

Второй :«xargs» буферизует ввод и не получает то, что он считает «полным буфером», поэтому к моменту вывода 1000-секундных отметок он еще не выполнил команду echo даже однажды. Если вы хотите, чтобы «xargs» запускал эхо отдельно для каждой входной строки, вам нужно добавить параметр «-n 1» в xargs.

Что касается «xargs», которому не нравятся одинарные кавычки, вы можете использовать опцию «-d '\n'», чтобы отключить обработку кавычек и разделять входные аргументы только новой строкой.

1
18.03.2021, 23:21

Теги

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