Нет веской причины использовать команду rename
вообще;просто напрямую переименуйте ваши совпадения.
find . -name '*.mp4.mp4' -execdir sh -c 'for f; do mv -- "$f" "${f%.mp4}"; done' _ {} +
... или даже ...
while IFS= read -r filename; do
mv -- "$filename" "${filename%.mp4}"
done < <(find . -name '*.mp4.mp4' -print0)
Тем не менее, чтобы объяснить почему вы получили свойошибка: если в каталоге, где вы запускаете команду, нет файлов *.mp4.mp4
,
find . -iname "*.mp4.mp4" -exec rename -f 's/\.mp4\.mp4\z/.mp4/' *.mp4.mp4 \;
становится ...
find . -iname "*.mp4.mp4" -exec rename -f 's/\.mp4\.mp4\z/.mp4/' '*.mp4.mp4' \;
... так, каждый rename
команда, запущенная find
, содержит *.mp4.mp4
в виде строки в своей командной строке.Это не оценивается как глоб (и заменяется списком подходящих файлов), потому что расширение глоба выполняется оболочкой , и между процессами find
и rename
нет оболочки.