0

NTFS ディレクトリが bash シェルで開かれています。ディレクトリ内のすべてのファイル名を ext3 に必要な 255 文字の制限に再帰的に切り詰めるコマンドは?

4

3 に答える 3

1

シェルが PWD であるため、NTFS ディレクトリにあると仮定します。

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

Dave の sed ベースのバージョンに似ていますが、ファイルごとの exec を回避します。コマンドラインの最大制限のために、非常に巨大なディレクトリで爆発し、サブディレクトリを実行しません。

于 2009-05-07T18:00:01.963 に答える
1

Windows シェルにアクセスできる場合は、次を使用できます。

@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

(注: rename コマンドの前に echo を追加したのは、実際に実行する前に機能することを視覚的に確認できるようにするためです。私のボックスで機能します。)

*nix ボックスを使用している人なら、bash 用の同様のスクリプトを作成できると思いますが、私は Windows の世界で立ち往生しています :)

幸運を!

于 2009-05-01T14:47:48.810 に答える
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 に答える