Pergunta

diretório

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?

Foi útil?

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 {} \;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top