Befehl alle Dateinamen auf 255 Zeichen gekürzt werden
Frage
Ein NTFS-Verzeichnis ist in einem Bash-Shell geöffnet. welcher Befehl werden alle Dateinamen in einem Verzeichnis auf die 255 Zeichen begrenzt rekursiv gestutzt für ext3 erforderlich?
Lösung
Wenn Sie Zugriff auf einen Windows-Shell haben, können Sie verwenden:
@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
(Hinweis:.. Ich habe ein Echo vor dem Umbenennungsbefehl hinzugefügt nur so können Sie visuell überprüfen kann, dass es funktioniert, bevor es tatsächlich läuft Arbeiten auf meine Box)
Ich bin sicher, dass jemand, der auf einer * nix-Box ist jetzt ein ähnliches Skript für bash machen könnte, aber ich bin in Windows-Welt stecken:)
Viel Glück!
Andere Tipps
Unter der Annahme, dass die Schale in dem NTFS-Verzeichnis sitzt, wie es PWD ist:
for f in *; do mv $f ${f:0:255}; done
Ähnlich wie Daves sed basierte Version, vermeidet aber eine exec pro Datei. sprengen werde auf einem wirklich groß dir, wegen der max Command Grenze, und nicht tun subdirs.
$ 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 {} \;