すべてのファイル名を255文字で切り捨てるコマンド
質問
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 {} \;
所属していません StackOverflow