Comando para truncar todos os nomes de arquivo em 255 caracteres
Pergunta
Um NTFS é aberta em um shell bash. o comando irá recursivamente truncar todos os nomes de arquivos em um diretório para o limite de 255 caracteres necessários para ext3?
Solução
Se você tiver acesso a um shell do Windows, você pode usar:
@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
(Nota:.. Eu adicionei um eco antes do comando de mudança de nome só assim você pode visualmente verificar que antes de obras atualmente em execução ele funciona em minha caixa)
Eu tenho certeza que alguém que está em uma caixa * nix agora poderia fazer um script semelhante para bash, mas eu estou preso no mundo do Windows:)
Boa sorte!
Outras dicas
Assumindo que o shell está sentado no diretório NTFS como é PWD:
for f in *; do mv $f ${f:0:255}; done
Assim como Dave da sed versão baseada, mas evita um exec por arquivo. Vai explodir em um realmente enorme dir, por causa do limite de linha de comando max, e não faz subdirs.
$ 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 {} \;