LINUX.ORG.RU

История изменений

Исправление mky, (текущая версия) :

У mv явно указывайте опцию -n, во избежания перезаписи.

Лучше сначала переименовать каталоги, а то ещё встрянете с MAX_PATH=4096. То есть нельзя, чтобы полное имя файла (с каталогами) было больше этого числа. Если что, нужно заходить в этот каталог, и там указывать относительное имя файла.

Каталоги нужно переименовывать от самых нижних к верхним. На bash писать рекурсивный обход каталогов сложно, проще написать скрип, переименовывающий один каталог и пусть find вызвает его, причём со сменой каталога. То есть скрипт запускается в том подкаталоге, где очередной каталог, начиная от самых вложеных. И в скрипте переименовывать $1, без добавления к нему спереди dirname.

find . -depth -type d -execdir SCRPT-PATH {} \; > /tmp/LOG.txt

То есть созадёте файл, там где можно исполняемые скрипты, (не знаю что там обрезает Альфа), примерно такого содержания:

#!/bin/bash
name=$(basename "$1")
new_name=$(printf "%s" "$name" | tr -d '.!?",~*^;:`')
# Здесь обрезка длины имени каталога, если надо

if [ "$name" != "$new_name" ]; then
   echo "Переименовываю $PWD/name в $new_name"
   mv -n -- "$1" "$new_name"
   if [ $? != 0 ] ; then
       echo "Неудачное преименовывание $PWD/name"
   fi
else
   echo "Имя $PWD/name не требует изменений."
fi
Даёте ему права на исполнение и полный путь к этому файлу указываете в команде find. find запускаете в том каталоге, откуда начинать переименовывание, ну или пишете этот каталог вместо точки первым аргументом. Потом читаете что насыпалось в /tmp/LOG.txt...

Исходная версия mky, :

У mv явно указывайте опцию -n, во избежания перезаписи.

Лучше сначала переименовать каталоги, а то ещё встрянете с MAX_PATH=4096. То есть нельзя, чтобы полное имя файла (с каталогами) было больше этого числа. Если что, нужно заходить в этот каталог, и там указывать относительное имя файла.

Каталоги нужно переименовывать от самых нижних к верхним. На bash писать рекурсивный обход каталогов сложно, проще написать скрип, переименовывающий один каталог и пусть find вызвает его, причём со сменой каталога. То есть скрипт запускается в том подкаталоге, где очередной каталог, начиная от самых вложеных. И в скрипте переименовывать $1, без добавления к нему спереди dirname.

find . -depth -type d -execdir SCRPT-PATH {} \; > /tmp/LOG.txt

То есть созадёте файл, там где можно исполняемые скрипты, (не знаю что там обрезает Альфа), примерно такого содержания:

#!/bin/bash
name=$(basename "$1")
new_name=$(printf "%s" "$name" | tr -d '.!?",~*^;:`')
# Здесь обрезка длины имени каталога, если надо

if [ "$name" != "$new_name" ]; then
   echo "Переименовываю $PWD/name в $new_name"
   mv -n -- "$1" "$new_name"
   if [ $? != 0 ] ; then
       echo "Неудачное преименовывание $PWD/name"
   fi
else
   echo "Имя $PWD/name не требует изменений."
fi
Даёте ему права на исполнение и полный путь к этому файлу указываете в команде find. Потом читаете что насыпалось в /tmp/LOG.txt...