Вы не говорите точно, чего должен достичь ваш сценарий, но если вы хотите передать каждый нечетный файл в качестве первого аргумента и каждое четное имя файла в качестве второго аргумента, вот как это сделать переносимым способом:
t=$(mktemp)
find /tmp/test -name "*.txt" -exec sh -c '
if [ -s $1 ]
then
./thulac < "$(<$1)" > "/mnt/tokenized/$2"
else
printf "%s" "$2" > "$1"
fi' sh $t {} \;
rm $t
Если вы просто хочу передать путь и имя файла каждого найденного файла, ответ проще, по-прежнему только с использованием переносимых команд и синтаксиса (POSIX), то есть не зависит от bash, GNU find и GNU xargs:
find /tmp/test -name "*.txt" -exec sh -c '
./thulac < "$1" > "/mnt/tokenized/$(basename "$1")"' sh {} \;
Обратите внимание, что { }
нужно заключать в кавычки только при использовании оболочки fish
, что очень маловероятно.