Мне нужно "| xargs -n 1 ", чтобы обойти xargs -I побочный эффект?

Я был удивлен, увидев это:

$ echo 1 2 3 4 5 | xargs -n 1 echo 1 2 3 4 5 $ echo 1 2 3 4 5 | xargs -n 1 -I FOO echo FOO 1 2 3 4 5 

То есть, использование флага -I имеет этот побочный эффект:

Кроме того, некотируемые пробелы не прерывают входные элементы; вместо этого разделитель является символом новой строки.

Поэтому обходной путь, который я вижу, таков:

 $ echo 1 2 3 4 5 | xargs -n 1 | xargs -n 1 -I FOO echo FOO 1 2 3 4 5 

Есть ли лучшее обходное решение?

Моя фактическая строка командной строки выглядит так:

 echo 102DRIFT 103DRIFT 104DRIFT 105DRIFT | xargs -n 1 | xargs -n 1 -I _DIR_ python process.py /SDcard/DCIM/_DIR_/ MyTrace.gpx 10 

(Ubuntu Trusty, если это необходимо).

  • xargs как поместить результат {} в $ (cmd {})?
  • Команда, которая печатает содержимое файла, указанное имя файла на stdin
  • Как искать слово во всем содержимом каталога в linux
  • копировать файлы с целевым именем на основе md5, используя find и xargs
  • find: несколько `-exec` с условиями
  • использование xargs для grep нескольких шаблонов
  • grep для файлов и открыть итоговые совпадения
  • xargs: Имеет ли порядок вариантов?
  • 2 Solutions collect form web for “Мне нужно "| xargs -n 1 ", чтобы обойти xargs -I побочный эффект?”

    С GNU xargs вы можете использовать опцию -d :

     $ echo 1 2 3 4 5 | xargs -n 1 -d" " -I FOO echo FOO 1 2 3 4 5 

    Я не думаю, что вам нужны xargs вообще:

     for DCIM in /SDcard/DCIM/10[2-5]DRIFT/ do python process.py "$DCIM" MyTrace.gpx 10 done 

    Тем не менее, есть еще несколько вещей, которые вы можете сделать, кроме того:

     printf 10%dDRIFT\\n 2 3 4 5 | ...the rest... 

    Или, если у вас нет кавычек во входных данных …

     IN | tr \ \\n | xargs ... the rest ... 
    Linux и Unix - лучшая ОС в мире.