Вибухнути всі папки


1

У мене є папка з близько ста підпапок і знову кожен з них має від 10 до 20 підпапок, тому все в цілому досить велике дерево папок.

Чи є простий спосіб, я можу вибухнути або експортувати всі файли в дереві в нову папку, яка буде просто однією папкою, що містить файли (без папок, без дерев)?

Я працюю OS X 10.8, хоча я також отримав Parallels, так що якщо є рішення для Windows, я можу просто запустити, що це не те, що мені потрібно робити щодня.


Схоже, вам потрібна якась рекурсивна команда MV, яка переміщує все, що має розширення, до статичного розташування. stackoverflow.com/questions/18295056/… stackoverflow.com/questions/4357233/… superuser.com/questions/205083/…
MonkeyZeus

Відповіді:


5

У OS X це має працювати:

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

The find команда шукає всі підкаталоги папки /top/source/directoryі знаходить лише файли (опція -type f ). Коли він знаходить, що він виконує ( -exec ) команду mv на знайденому файлі ( {} ), щоб перемістити його до нового каталогу, /destination/directory.

Зверніть увагу, що це місце раніше \; це абсолютно необхідно.


Попереджайте, що це перемістить всі файли, і що вони більше не будуть в оригінальній структурі.
CyberJacob

Як щодо перезапису файлів призначення, якщо імена файлів однакові?
pbies

якщо ви хочете перезаписати, використовуйте mv -f; якщо ви не хочете перезаписувати, mv -n; якщо ви хочете вибрати на основі кожного конкретного випадку, mv -i
MariusMatutiae

0

Це має працювати на стороні Windows у PowerShell :

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


0

Ця відповідь заснована на Python, тому вона повинна працювати як на OSX, так і на Windows, якщо ви встановите Python (а для запису - з верхньої частини голови).

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)

Це має скопіювати всі файли (плюс метадані) з path Структура до store папки.

Якщо ви не дбаєте про конфлікти імен, не використовуйте код між name = "" і for files in filenames заяви. Що робить цей код - це перетворення / до _ а потім перекласти це ім'я каталогу до імен файлів.

Це збереже початкову структуру, яку ви зможете видалити з shutil.rmtree(path)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.