Domanda

Sto cercando uno script (Perl, Python o in batch andrebbe bene), che passerà attraverso un albero di file designato e rinomina tutti i file figlio.

Per esempio, Folder1>File1.anytype diventa Folder1>Folder1File1.anytype.

Grazie

È stato utile?

Soluzione

Si parla di un file batch, che probabilmente significa che siete su Windows (suppongo si fa riferimento a un file .bat). Se siete su un sistema Unix, dare a questo un colpo:

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

In alternativa, questo programma Python 3 può fare il trucco (dovrebbe funzionare anche su Windows ...):

#!/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:])

Il layout directory prima:

.:
Abc  Def

./Abc:
Foo2.bar  Foo.bar

./Def:
Baz2.quux  Baz.quux  Ghi

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

Il layout directory dopo:

.:
Abc  Def

./Abc:
AbcFoo2.bar  AbcFoo.bar

./Def:
DefBaz2.quux  DefBaz.quux  Ghi

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

Altri suggerimenti

Il miglior renamer batch è mmv .

E puoi anche Come fare una massa rinominare?

si potrebbe dare una prova di BatchRename: http://batchrename.foryoursoft.com/

È possibile ottenere tali rinomina utilizzando un ciclo for nidificato nella riga di comando .. anche se un po 'brutto:

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

Se si desidera mettere il comando di cui sopra in uno script batch, ripetere ogni volta caratteri%.

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

Per capire che cosa il comando precedente corrisponde, rivolgetevi FOR /? nella riga di comando.

Mi sento come Batch è così arcana questi giorni ho bisogno di preservare la saggezza BAT in qualche modo ...: -)

sto scherzando :-) .. ma il comando funziona, ho provato.

piuttosto banale in Perl utilizzando File :: Trova e File :: Copy

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top