Решение:
cd /usr/lib/gcc/x86_64-linux-gnu/4.6
sudo ln -s /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a libgfortran.a
Просто анализируйте и повторно собирайте $file, когда вы перебираете соответствующие файлы: ${file%/*} дает вам $ file со всем после удаления последнего /, а ${file##*/} дает вам $ file со всем до последнего / удален; вместе взятые ${file%/*}/old/$date-${file##*/} дадут вам «новое» имя файла, соответствующее $file.
Предположительно, дата не изменится при запуске вашего скрипта, поэтому нет смысла вызывать date для каждого файла; скорее, сохраните дату в переменной один раз, а затем используйте ее во время цикла: date=$(date '+%G-%m-%d'). (Обратите внимание, что современные скрипты должны использовать $(...), а не обратные ссылки. Также обратите внимание, что % не является «специальным» символом и поэтому не требует кавычек или экранирования, хотя в качестве хорошей практики вся строка формата должна быть цитата.)
Если у вас есть новая версия Bash, вы можете полностью исключить подселлем, используя вместо этого printf -v date '%(%G-%m-%d)T' -1.
Вы также можете счесть полезным использовать shopt -s globstar так что вы можете искать произвольную глубину в каталогах и shopt -s nullglob, чтобы unmatched glob (wildcard) расширялся до «ничего» вместо исходного шаблона glob.
Полагая все это вместе, мы получаем: [ ! d4]
shopt -s globstar nullglob
date=$( date '+%G-%m-%d' )
for file in /home/*/logs/**/access.log.gz
do
target=${file%/*}/old/$date-${file##*/}
mv -vi "$file" "$target"
done
Если у вас установлен zsh, используйте zmv. В сценарии:
#!/bin/zsh
autoload zmv
zmv '/home/*/logs/access.log.gz' '$f:h/`date +\%G-\%m-\%d`-$f:t'
В командной строке zsh поместите autoload zmv в свой ~/.zshrc и запустите эту последнюю строку в командной строке.