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?

War es hilfreich?

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 {} \;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top