0

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

4

3 回答 3

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

(注意:我在重命名命令之前添加了一个回显,以便您可以在实际运行之前直观地验证它是否有效。适用于我的盒子。)

我敢肯定,现在在 *nix 机器上的人可以为 bash 制作类似的脚本,但我被困在 Windows 世界:)

祝你好运!

于 2009-05-01T14:47:48.810 回答
1

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

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

类似于 Dave 的基于 sed 的版本,但避免了每个文件的 exec。由于最大命令行限制,将在一个非常大的目录上爆炸,并且不执行子目录。

于 2009-05-07T18:00:01.963 回答
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 {} \;
于 2009-05-01T14:47:46.750 回答