Как переименовать файлы и папки с одинаковым именем, но разным регистром?
У пользователя есть файлы, имена которых совпадают с названием каталогов рядом лежащих и/или с названием другого файла - отличается регистр.
Например - в каталоге /home/user1/Desktops/Desktop1/ у нас есть файл SNS_file.lic и там же есть каталог SNS_FILE.LIC. Соответственно, для NTFS это одна сущность и rsync не может перенести данные файлы и каталоги. Как можно скриптом на bash пройтись по всем директориям пользователя и переименовать файлы, которые совпадают по имени с именем каталога или файла, лежащего рядом?
base_dir="/home/user"
find "$base_dir" -type d | while read -r directory; do
contents=$(ls -1 "$directory")
while IFS= read -r item; do
if [ -f "$directory/$item" ]; then
lc_item=$(echo "$item | tr '[:upper:]' '[:lower:]')
if [ -d "$directory/$lc_item" ]; then
suffix=$(date +%s)
mv "$directory/$item" "$directory/${item}_${suffix}"
fi
fi
done <<<"$contents"
done
Такая функция смогла переименовать только файл в директории /home/user/Загрузки/ , но глубже не идет
StasStasov, у вас в скрипте немного странный алгоритм. Он ищет имена файлов, для которых есть имена директорий, написанные только маленькими буквами. То есть будет исправлен файл TEst.tMp, если существует директория test.tmp. Другие комбинации имени директории (например Test.TMP) учитываться не будут.
Вам точно именно этот алгоритм нужен?