Как сказано в комментариях, это не работает, потому что вы ищете файлы copy_*.txt
и пытаетесь переместить файлы с суффиксом .cob
. Кроме того, ваши переменные не заключены в кавычки и будут вызывать проблемы с пробелами в именах файлов.
Экспортируйте вашу функцию, чтобы сделать my_mv
доступной в find
и использовать -exec
, чтобы предотвратить проблемы с именами файлов, содержащими символы новой строки:
my_mv () { for i; do echo "$i"; mv "$i" "${i%.cob}.toto"; done; }
export -f my_mv
find . -name 'copy_*.cob' -exec bash -c 'my_mv "$@"' bash {} +
Часто проще использовать небольшой сценарий оболочки вместо функции:
find . -name 'copy_*.cob' -exec sh -c '
for i; do
echo "$i"
mv "$i" "${i%.cob}.toto"
done
' sh {} +
Или переместить код в сценарий оболочки mymv.sh
#!/bin/sh
for i; do
echo "$i"
mv "$i" "${i%.cob}.toto"
done
и выполнить скрипт в find
:
find . -name 'copy_*.cob' -exec ./mymv.sh {} +