質問

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

役に立ちましたか?

解決

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コマンドの前にエコーを追加したので、実際に実行する前にエコーが動作することを視覚的に確認できます。私のボックスで動作します。)

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

がんばって!

他のヒント

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

  *のfの

。 do mv $ f $ {f:0:255};完了

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

$ 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 {} \;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top