Rozbij wszystkie foldery


1

Mam folder zawierający około stu podfolderów, a każdy z nich ma od 10 do 20 podfolderów, a więc w sumie dość duże drzewo folderów.

Czy istnieje prosty sposób, aby eksplodować lub wyeksportować wszystkie pliki z drzewa do nowego folderu, który będzie tylko jednym folderem zawierającym pliki (bez folderów, bez drzew)?

Używam systemu operacyjnego OS X 10.8, chociaż mam również Parallels, więc jeśli istnieje rozwiązanie Windows, mógłbym po prostu uruchomić to, ponieważ nie jest to coś, co muszę robić codziennie.


Wygląda na to, że potrzebujesz jakiegoś rekurencyjnego polecenia MV, które przenosi wszystko z rozszerzeniem do statycznej lokalizacji. stackoverflow.com/questions/18295056/… stackoverflow.com/questions/4357233/… superuser.com/questions/205083/…
MonkeyZeus

Odpowiedzi:


5

W OS X powinno to działać:

find /top/source/directory -type f -exec mv {} /destination/directory \;

The find polecenie przeszukuje wszystkie podkatalogi folderu /top/source/directoryi znajduje tylko pliki (opcja -type f ). Kiedy znajdzie jeden, wykonuje ( -exec ) Komenda mv na znalezionym pliku ( {} ), aby przenieść go do nowego katalogu, /destination/directory.

Zauważ, że to miejsce wcześniej \; jest absolutnie konieczne.


Ostrzegamy, że spowoduje to przeniesienie wszystkich plików i że nie będą już w oryginalnej strukturze.
CyberJacob

A co z nadpisywaniem plików docelowych, jeśli nazwy plików są takie same?
pbies

jeśli chcesz nadpisać, użyj mv -f; jeśli nie chcesz zastępować, mv -n; jeśli chcesz wybrać indywidualnie dla każdego przypadku, mv -i
MariusMatutiae

0

Powinno to działać po stronie Windows PowerShell :

Get-ChildItem -Path "C:\Source" -Recurse -Include *.* | Move-Item -Destination "C:\Destination\"


0

Ta odpowiedź jest oparta na Pythonie, więc powinna działać zarówno na OSX, jak i na Windows, zakładając, że instalujesz Pythona (i dla rekordu jest z mojej głowy).

import os
import shutil

path = "C:/dir"    # the directory tree you want to "explode"
store= "C:/store"  # where all files will be stored

for dirpath, dirnames, filenames in os.walk(path):

    name = ""
    for c in dirpath:
        if c != "/":    # if the character is different than the current directory character
            name += s
        else:
            name += "_" # "quick and dirty" way of resolving name conflicts

    for files in filenames:

        orig_loc = os.path.join(dirpath,files)
        copy_loc = os.path.join(store,name + "_" + files)
        shutil.copy2(orig_loc,copy_loc)

Powinno to skopiować wszystkie pliki (plus metadane) z pliku path struktura do store teczka.

Jeśli nie zależy ci na konfliktach nazw, nie używaj kodu między name = "" i for files in filenames sprawozdania. To, co robi ten kod, to konwersja / do _ a następnie dodaj tę wyczyszczoną nazwę katalogu do nazw plików.

To zachowa oryginalną strukturę, którą możesz później usunąć shutil.rmtree(path)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.