эхом basename под xargs?

У меня есть следующая команда:

ls /some/path/*dat | xargs -n 1 -I @ sh -c "echo `basename @`" 

с каталогом /some/path/ содержащим:

 /some/path/a /some/path/b /some/path/c /some/path/d 

Я хочу получить результат:

 a b c d 

Но я все еще получаю полный путь. Что я делаю не так ?

edit: BTW, я знаю, что есть более простой способ, я могу просто запустить basname вместо

 echo `basename @` 

Но мне нужно запустить сложную команду, что-то вроде

 octave --silent --eval "somefunction('`basename @`','@',...))" 

edit2:

Вот настоящая команда:

  ls ~/phd/data/conll2012/dev.megam/*dat | xargs -P 16 -n 1 -I@ timeout -k 1s 15m sh -c "if [ ! -f '~/phd/xp/conll2012/dev.megam/@.$epsilon$mink$minn$alpha' ]; then octave --silent --eval \"xprp('~/phd/xp/conll2012/dev.megam/@.$epsilon$mink$minn$alpha.rp','@',$alpha,$mink,$minn,$epsilon);\" 2>> ~/xpgrid.log;fi" 

В принципе, у меня есть набор файлов в каталоге, и эта команда передает эти файлы для вывода результата в другой каталог, проверяя, что результат еще не существует.

Итак, мне нужны оба файла с полным доступом и файлы с базовым именем.

Как заставить его работать? Более простой пример в начале может помочь сделать это более ясным.

2 Solutions collect form web for “эхом basename под xargs?”

Тестовый тест можно устранить, просто изменив двойные кавычки на одинарные кавычки, но вам может быть интересно узнать о GNU parallel .

Вы можете сделать то же самое:

 parallel echo {/} ::: /some/path/*dat 

(Возможно, вам придется процитировать фигурные скобки, в некоторых оболочках.)

Помимо более четкого синтаксиса, parallel будет выполняться несколько команд одновременно.

Ваш второй пример будет выглядеть так:

 parallel octave --silent --eval "\"somefunction('{/}', '{}', ...)\"" ::: /some/path/*dat 

(Вы должны иметь котировки в кавычках, потому что они дважды оцениваются.)

 ls /some/path/*dat | xargs -n 1 -I @ sh -c 'echo `basename "@"`' 

basename выполняется слишком рано в вашем коде.

Если вы не уверены, что на путях нет пробелов или вкладок, вы должны использовать -d \\n (или find ... -print0 | xargs -0 ... ) и учитывать " вокруг @ .

  • Необходимо отформатировать 5 дисков параллельно
  • Как копировать рекурсивно все файлы не старше 1 дня?
  • Правильный синтаксис для использования awk в сочетании с другой командой внутри xargs sh -c
  • xargs на OSX: незаконный вариант -
  • Проверьте содержимое файла, ищущего повреждение, размер файла указывает размер «ноль»
  • Как использовать определенную функцию с xargs
  • Утилита, полезная для работы с памятью, возвращает N первых отсортированных значений
  • Внутренний вызов функции с параметрами xargs
  • GNU parallel vs & (я имею в виду фон) vs xargs -P
  • Измените код ASP на PHP-код во всех файлах
  • Как передать строки с одинарными кавычками в grep?
  • Interesting Posts

    grep шаблон, который не имеет точки после него

    Как можно сделать ноутбук оставающимся pingable и продолжать запускать его демоны даже после закрытия крышки?

    `crontab -e: E212: не удается открыть файл для записи` при использовании gvim (работает с vi)

    «Завершение работы выполняется …» при выключении

    Ошибка «Недостаточно памяти» при копировании больших файлов с помощью pcmanfm

    На LMDE 2, почему мой экран отключается через несколько секунд?

    Можно ли отправить процессу xpdf сигнал, который заставляет его перезагружать отображаемый файл?

    Блокировать встроенное приложение?

    Получение списка поврежденных файлов из папки и ее подпапки

    Что делает нажатие Alt + Shift + 3 в терминале?

    htop – единицы измерения для использования памяти

    Daemontools multilog теряет информацию о времени в строке журнала. Как это исправить?

    Список файлов, не сохраненных в репозиториях Git

    Почему ssh -g говорит, что адрес уже используется?

    Как применять рекурсивные каталоги chmod без влияния на файлы?

    Linux и Unix - лучшая ОС в мире.