Это должно сделать:
#!/bin/bash
# this is the crucial setting: replace a glob pattern that matches zero files
# with nothing (the default is to *not* replace the pattern at all)
shopt -s nullglob
destination=/some/directory
unique_filename() {
local root=${1%_*}_
local files=( "$destination/$root"* )
echo "$destination/${root}${#files}"
}
cd /wherever/you/need/to/go
for f in */Li?Fe?O?_0; do
echo mv "$f" "$(unique_filename "$(basename "$f")")"
done
Он работает путем подсчета количества файлов в соответствии с целевым каталогом, например, «Li1Fe5O6_ *». Если их нет, используйте «Li1Fe5O6_0». Если «Li1Fe5O6_0» уже присутствует, в массиве $ files
будет один элемент, поэтому уникальным именем файла будет «Li1Fe5O6_1»