эхом 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" 

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

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

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

Тестовый тест можно устранить, просто изменив двойные кавычки на одинарные кавычки, но вам может быть интересно узнать о 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 ... ) и учитывать " вокруг @ .