Команда для усечения всех имен файлов до 255 символов
Вопрос
Каталог NTFS открыт в оболочке bash. Какая команда рекурсивно усекает все имена файлов в каталоге до 255 символов, требуемых для ext3?
Решение
Если у вас есть доступ к оболочке Windows, вы можете использовать:
@echo off
setlocal EnableDelayedExpansion
REM loop over all files in the cwd
for /f %%a in ('dir /a-d /b') do (
REM store this filename in a variable so we can do substringing
set ThisFileName=%%a
REM now take a substring
set ThisShortFileName=!ThisFileName:~0,255!
REM finally, the rename:
echo ren %%a !ThisShortFileName!
)
:EOF
endlocal
(Примечание. Я добавил эхо-сигнал перед командой переименования, чтобы вы могли визуально убедиться, что он работает, прежде чем он будет запущен. Работает на моем компьютере.)
Я уверен, что кто-то, кто сейчас находится в * nix-боксе, мог бы сделать похожий скрипт для bash, но я застрял в мире Windows:)
Удачи!
Другие советы
Предполагая, что оболочка находится в каталоге NTFS в качестве PWD:
для f в *; do mv $ f $ {f: 0: 255}; сделано код>
Похоже на версию sed, основанную на Dave, но избегает exec для каждого файла. Из-за максимального ограничения командной строки будет взорван на действительно огромном dir и не будет выполнять subdir.
$ cat truncname
#!/bin/bash
# requires basename, dirname, and sed
mv $1 `dirname $1`/`basename $1 | sed 's/^\(.\{0,255\}\).*/\1/'`
$ chmod a+x truncname
$ find . -exec ./truncname {} \;