У нас очень большая файловая структура, которая была очень плохо построена.Пути содержат много пробелов, @, пробелов вокруг тире.
Все это размещено на Synology NAS, поэтому у меня нет доступа ко всему массиву обычно включаемых инструментов (например, rename
).
Я пытаюсь переименовать файл ANDимена папок с пробелами в начале и в конце.
# Global vars
tstamp=$(date +%Y-%m-%d_%H%M%S)
# Change for separator to newline
IFS=$'\n'
echo "$tstamp - Renaming files with leading space: \n"
for filename in $(find . -type f -name '[[:space:]]*')
do
newFilename=$(echo $filename |sed 's/\/[[:space:]]/\//g')
echo "original: $filename"
echo "new : $newFilename"
mv -i -v -n $filename $newFilename
echo "\n"
done
echo "$tstamp - Renaming files with trailing space: \n"
for filename in $(find . -type f -name '*[[:space:]]')
do
newFilename=$(echo $filename |sed 's/[[:space:]]$//g')
echo "original: $filename"
echo "new : $newFilename"
mv -i -v -n $filename $newFilename
echo "\n"
done
# A slash "/" in a filename is not possible thus it's not verified
echo "$tstamp - Renaming files with unsupported characters (\ / \" : < > ; | * ?):"
for filename in $(find . -type f -name '*\**' -o -name '*\\*' -o -name '*"*' -o -name '*:*' -o -name '*<*' -o -name '*>*' -o -name '*;*' -o -name '*|*' -o -name '*\?*')
do
newFilename=$(echo $filename |sed 's/\(\\\|"\|:\|<\|>\|;\||\|\*\|\?\)//g')
echo "original: $filename"
echo "new : $newFilename"
mv -i -v -n $filename $newFilename
echo "\n"
done
echo "Done."
#EOF
Хорошо работает переименование файлов с неподдерживаемыми символами, но не ведущие и обучающие пробелы.
Вот фактический вывод, где я заменил некоторые имена в целях безопасности:
оригинал:
./ABC- Financing/2018 - ABC Capital Bl Fund 2018 (VCCI)/0 - Dataroom/8 - Vérification diligente/3. Governance/ 2017Q1/ Documents de Julie/@eaDir/ PPP@SynoResource
новый:
./ABC - Financing/2018 - ABC Capital Innovation Fund 2018 (GGGG)/0 - Dataroom/8 - Vérification diligente/3. Governance/2017Q1/Documents de Julie/@eaDir/PPP@SynoResource
./ABC - Financing/2018 - ABC Capital Innovation Fund 2018 (GGGG)/0 - Dataroom/8 - Vérification diligente/3. Governance/ 2017Q1/ Documents de Julie/@eaDir/ CDP@SynoResource
→ ./ABC - Financing/2018 - ABC Capital Innovation Fund 2018 (GGGG)/0 - Dataroom/8 - Vérification diligente/3. Governance/2017Q1/Documents de Julie/@eaDir/PPP@SynoResource
mv: cannot move "./ABC - Financing/2018 - ABC Capital Innovation Fund 2018 (GGGG)/0 - Dataroom/8 - Vérification diligente/3. Governance/ 2017Q1/ Documents de Julie/@eaDir/ PPP@SynoResource" to "./ABC - Financing/2018 - ABC Capital Innovation Fund 2018 (GGGG)/0 - Dataroom/8 - Vérification diligente/3. Governance/2017Q1/Documents de Julie/@eaDir/PPP@SynoResource": No such file or directory
Я не понимаю, почему файл не найден командой mv.