Question

An NTFS directory is open in a bash shell. what command will recursively truncate all filenames in a directory to the 255 character limit required for ext3?

Was it helpful?

Solution

If you have access to a Windows shell, you can use:

@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

(Note: I have added an echo before the rename command just so you can visually verify that it works before actually running it. Works on my box.)

I'm sure somebody who's on a *nix box right now could make a similar script for bash, but I'm stuck in Windows world :)

Good luck!

OTHER TIPS

Assuming that the shell is sitting in the NTFS directory as it's PWD:

for f in *; do mv $f ${f:0:255}; done

Similar to Dave's sed based version, but avoids an exec per file. Will blow up on a really huge dir, because of the max commandline limit, and doesn't do 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 {} \;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top