Frage

Ich bin für ein Skript suchen (Perl, Python oder Batch wäre schön), die durch einen bestimmten Dateibaum gehen und benennt alle untergeordneten Dateien.

Zum Beispiel Folder1>File1.anytype wird Folder1>Folder1File1.anytype.

Danke

War es hilfreich?

Lösung

Sie erwähnen eine Batch-Datei, was wahrscheinlich bedeutet, dass Sie unter Windows sind (ich nehme an, Sie auf eine .bat Datei verweisen). Wenn Sie auf einem Unix-System sind, dann geben Sie diese einen Schuss:

find . -mindepth 2 -type f -exec sh -c "mv {} \`dirname {}\`/\`dirname {} | sed 's/^\.//' | sed 's/\///g'\`\`basename {}\`" \;

Alternativ kann dieses Python-3-Programm kann den Trick (sollte auch unter Windows arbeiten, ...):

#!/usr/bin/env python3.0

import os
import sys 

def raise_error(e):
    raise e

def full_split(path):
    head, tail = os.path.split(path)

    if head:
        return full_split(head) + [tail]

    return [tail]

def main(args):
    if len(args) != 1:
         print("Please specify one target directory", file=sys.stderr)
         sys.exit(1)

    os.chdir(args[0])
    for dirpath, _, filenames in os.walk('.', onerror=raise_error):
        for f in filenames:
            old = os.path.join(dirpath, f)
            new = os.path.join(dirpath, ''.join(full_split(dirpath[2:]) + [f]))
            os.rename(old, new)

if __name__ == '__main__':
    main(sys.argv[1:])

Die Verzeichnisstruktur vor:

.:
Abc  Def

./Abc:
Foo2.bar  Foo.bar

./Def:
Baz2.quux  Baz.quux  Ghi

./Def/Ghi:
Bar2.foo  Bar.foo

Die Verzeichnisstruktur nach:

.:
Abc  Def

./Abc:
AbcFoo2.bar  AbcFoo.bar

./Def:
DefBaz2.quux  DefBaz.quux  Ghi

./Def/Ghi:
DefGhiBar2.foo  DefGhiBar.foo

Andere Tipps

Das beste Batch Renamer ist mmv .

Und auch Wie eine Masse umbenennen zu tun?

Sie einen Versuch zu BatchRename geben könnte: http://batchrename.foryoursoft.com/

Sie können solche Umbenennungen erreichen, indem eine verschachtelte for-Schleife in der Befehlszeile mit .. wenn auch ein wenig hässlich:

for /D %d in (*) do for %f in ("%d\*.*") do move "%f" "%d\%~nd%~nf"

Wenn Sie den obigen Befehl in einem Batch-Skript setzen, wiederholen Sie jeweils% Zeichen einmal.

for /D %%d in (*) do for %%f in ("%%d\*.*") do move "%%f" "%%d\%%~nd%%~nf"

Um zu verstehen, was der obige Befehl funktioniert, FOR /? in der Befehlszeile konsultieren.

Ich fühle mich wie Batch so obskur in diesen Tagen Ich brauche die BAT Weisheit irgendwie ... zu erhalten: -)

Ich scherze :-) .. aber der Befehl funktioniert, ich habe es versucht.

Pretty trivial in Perl File :: finden und File :: Copy

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top