Pregunta

Un directorio NTFS está abierto en un shell bash. ¿Qué comando truncará recursivamente todos los nombres de archivo en un directorio al límite de 255 caracteres requerido para ext3?

¿Fue útil?

Solución

Si tiene acceso a un shell de Windows, puede 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: He agregado un eco antes del comando de cambio de nombre para que pueda verificar visualmente que funciona antes de ejecutarlo. Funciona en mi caja).

Estoy seguro de que alguien que esté en un cuadro * nix en este momento podría crear un script similar para bash, pero estoy atascado en el mundo de Windows :)

¡Buena suerte!

Otros consejos

Suponiendo que el shell está en el directorio NTFS como PWD:

  

para f en *; hacer mv $ f $ {f: 0: 255}; hecho

Similar a la versión basada en sed de Dave, pero evita un archivo ejecutable por archivo. Explotará en un directorio realmente grande, debido al límite máximo de la línea de comandos, y no hace subdirecciones.

$ 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top