用于截断255个字符的所有文件名的命令

时间:2009-05-01 14:33:16

标签: rename ntfs filenames ext3 fat32

NTFS目录在bash shell中打开。什么命令将以递归方式将目录中的所有文件名截断为ext3所需的255个字符限制?

3 个答案:

答案 0 :(得分:1)

如果您有权访问Windows shell,则可以使用:

@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

(注意:我在重命名命令之前添加了一个echo,这样你就可以在实际运行之前直观地验证它是否正常工作。在我的盒子上工作。)

我敢肯定现在正在使用* nix框的人可以为bash制作类似的脚本,但我陷入了Windows世界:)

祝你好运!

答案 1 :(得分:1)

假设shell位于NTFS目录中,因为它是PWD:

  

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

与Dave基于sed的版本类似,但避免了每个文件的exec。由于最大命令行限制,并且不会使用子目录,因此会在真正巨大的目录上爆炸。

答案 2 :(得分:0)

$ 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 {} \;