问题
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?
回答1:
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!
回答2:
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.
回答3:
$ 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 {} \;
来源:https://stackoverflow.com/questions/811607/command-to-truncate-all-filenames-at-255-characters