Поскольку файл
в $ (echo $ file | md5)
не будет интерпретироваться, вам потребуется обходной путь.
Одна из возможностей - просто передать его в цикл while
и прочитать каждый вывод - в этом случае лучше пропустить xargs
целиком
find ... | while read file ; do cp "$file" "datnew/$( echo "$file" | md5 )" ; done
Для использования его с -print0
заменить нулевой символ новой строкой, используя tr
find ... -print0 | tr '\000\' '\n' | while read ; do ... ; done