Kopiowanie wszystkich plików z wielu folderów do jednego folderu

3

Mam około 65000 plików w folderach w 3000 c:\foo\root(to znaczy c:\foo\root\folder1, c:\foo\root\folder2etc). Chcę skopiować wszystkie te pliki do jednego folderu c:\All\.

Próbowałem Robocopy, ale robi tylko pełną kopię (w tym katalogi). Jeśli podczas procesu kopiowania napotka pliki o tej samej nazwie, potrzebuję go, aby zmienić nazwę nowego na temp(2).filepodobny lub podobny, a nie tylko zignorować go lub zastąpić.

Czy ktoś wie, jak to zrobić za pomocą pliku wsadowego / wiersza polecenia? Nawet niektóre C # byłoby świetne.

Alex
źródło
65 KB w jednym katalogu. Daj nam znać, jak to wpływa na takie rzeczy, jak otwieranie w Eksploratorze, tworzenie list, wyszukiwanie ... Byłoby ciekawe, pomyślałbym.
therube
Początkowe otwarcie katalogu nie stanowi problemu, ale próba przeniesienia, zmiany nazwy lub usunięcia dowolnego pliku (ów) powoduje ogromne spowolnienie. Kiedy to robię, Explorer stosuje listę 1, 10, 100, 1000, 11, 110, 1100 itd., TO następnie porządkuje ją w logiczny sposób 1, 2, 3. Sortowanie i uciekanie się zajmuje dużo czasu. Podobno system plików NTFS może obsłużyć do 4 miliardów plików (zakładam, że wszystkie mogą znajdować się w tym samym katalogu). Życzę powodzenia, aby coś z tym zrobić. Myślę, że około 10000 plików na folder to limit, jeśli chcesz, aby wszystko działało płynnie.
Alex

Odpowiedzi:

1

Nie myśląc jednoznacznie o bankomatach, więc jest to ogólna metoda ...

Jeśli zarchiwizujesz drzewo (użycie metody bez kompresji byłoby szybsze), możesz pracować na dwa sposoby. Zarchiwizuj drzewo (włączając w to podkatalogi) i wypakuj za pomocą „E” (wypakuj), a nie za pomocą „X” (wypakuj pliki z pełną ścieżką), wyodrębnione pliki zostaną umieszczone w jednym katalogu. Innym sposobem na zrobienie tego samego byłoby utworzenie archiwum, aby powiedzieć mu „wykluczyć ścieżki z nazw”. Wtedy utworzone archiwum byłoby pozbawione ścieżek, tzn. Wszystkie pliki przechowywane w jednym katalogu w archiwum, więc po rozpakowaniu również by je rozpakowały. (Myślenie o poprzedniej metodzie ma większy sens).

(ARJ może to zrobić. Myślisz, że 7z & RAR i ZIP też mogą?)

„Spłaszczyć” to słowo, o którym starałem się myśleć wcześniej. Dzięki temu program do tworzenia kopii zapasowych / synchronizacji może być ustawiony na „spłaszczanie” struktury katalogów.

Więc inne myśli ... Tar i DD? Może to pomoże innym wymyślić lepszą odpowiedź, że nie mam na myśli bankomatu.

(Minęło dużo czasu, odkąd użyłem Tar, więc mogę się wycofać, ale coś w rodzaju ...)

 tar -cvf c:/foo/roo | tar -xvf -

Archiwizator i kopia zapasowa / synchronizator powinny być w stanie obsługiwać wszelkie duplikaty w sposób zautomatyzowany.
ARJ może. Nie wiesz o smole?

Therube
źródło
Wow, nigdy nie słyszałem o ARJ. Próbowałem tego z 7z, ale bez takiego szczęścia. Tak czy inaczej, wypróbowałem tymczasowe rozwiązanie przy użyciu C # - po prostu rekurencyjnie uruchom wszystkie foldery w katalogu głównym i umieść pełną ścieżkę każdego znalezionego pliku w pliku tekstowym. Następnie uruchom plik tekstowy za pomocą File.Copy () i nazwij każdy plik 1.pdf, 2.pdf, 3.pdf itp. Tak naprawdę nie potrzebowałem oryginalnych nazw plików, więc to działa i nie nie musisz się martwić o nadpisywanie plików. Właśnie skończyłem program i działa - do skopiowania pozostało ~ 35 000 plików! Po zakończeniu opublikuję efekt 65000 plików w jednym folderze. Dzięki!
Alex