Достигнут лимит размера папки?

У меня есть сценарий Python, который копирует файлы из очень большой папки (109,05 ГБ, которая содержит разбросанные по подпапкам, 13,071 элементов) с внешнего HD на другой.

Сценарий, который я использовал, не вызвал исключений. К сожалению, когда я смотрю на папку назначения, она имеет только (6,563 элемента, общим объемом 58,8 ГБ), она должна иметь такой же размер и содержать столько же файлов, сколько и исходная ...

Каждый файл Я ищу, кажется, были перенесены жестко.

Мой вопрос: это ошибка дисплея? Или действительно ли существует ограничение размера папки, и некоторые файлы могли быть явно перезаписаны?

Для тех из вас, кто немного знает Python, поскольку это простой скрипт, я присоединяюсь к нему здесь:

source_dir = r'/media/julien/Elements/Ma Musique'
dest_dir = r'/media/julien/TOSHIBA EXT/All my music'

def copy_all_files(source_dir,destination_dir):
    for root, subdirs, files in os.walk(source_dir):
        for file in files:
            path = os.path.join(root, file)
            print (path.encode("utf-8"))
            shutil.copy2(path, destination_dir) 


copy_all_files(source_dir,dest_dir)
print("DONE")
3
задан 4 August 2019 в 09:53

1 ответ

Только один из файлов, которые имеют двойные названия, копируется, независимо от которого исходного подкаталога они произошли из.

Во время выполнения:

Все файлы действительно копируются, но файлы в целевом каталоге с идентичным именем как источник будут перезаписаны без исключения. Таким образом, только последний скопированный файл останется в целевом каталоге.

Чтение здесь:

shutil — Высокоуровневые операции файла

Если dst является каталогом, файлом с тем же базовым именем, как src создается (или перезаписывается) в указанном каталоге

Это не означает, что все Ваши отличные файлы копируются. Если больше чем один файл будет иметь другое содержание и то же имя, то только один будет скопирован независимо от различий в содержании файла.

Для наблюдения, что происходит, в то время как Вы выполняете свой код, выполните измененную версию ниже:

import os
import shutil
from termcolor import colored

source_dir = r'/media/julien/Elements/Ma Musique'
dest_dir = r'/media/julien/TOSHIBA EXT/All my music'

def copy_all_files(source_dir,destination_dir):
    failed = 0
    succeeded = 0
    for root, subdirs, files in os.walk(source_dir):
        for file in files:
            path = os.path.join(root, file)
            if os.path.exists(destination_dir + '/' + file):
                print(file + colored(' from ', 'yellow') + root + colored(' filename already exist, cannot copy', 'red'))
                # Normally destination files will be overwritten without exception, but now an error message is printed instead
                failed += 1
            else:
                shutil.copy2(path, destination_dir)
                print(file + colored(' from ', 'yellow') + root + colored(' copied successfully', 'green'))
                succeeded += 1
    print(colored('copied files ', 'green') + str(succeeded))
    print(colored('duplicate not copied files ', 'red') + str(failed))



copy_all_files(source_dir,dest_dir)
print("DONE")

Отвечать на Ваш вопрос:

Мой вопрос: действительно ли это - ошибка дисплея? Или есть ли действительно, предел размера папки и некоторый файл, возможно, были неявно перезаписаны?

Кажется, что у Вас есть различные файлы с тем же именем файла под различными подкаталогами в исходном диске, например:

Файл 1 /media/julien/Elements/Ma Musique/audio/book1.mp3

Файл 2 /media/julien/Elements/Ma Musique/audio_books/book1.mp3

Когда они копируются в целевой диск, они все переходят к тому же каталогу (структура подкаталога НЕ сохраняется в Вашем коде), таким образом, следующее происходит:

Во-первых: файл 1 копируется так, целевой каталог будет похож на это:

`/media/julien/TOSHIBA EXT/All my music/book1.mp3`

Затем: файл 2 копируется так shutil.copy2() файл 1 перезаписей в целевом каталоге, который имеет имя файла book1.mp3 с файлом 2, который имеет то же имя файла и Вы заканчиваете с целевым каталогом, бывшим похожим на это:

`/media/julien/TOSHIBA EXT/All my music/book1.mp3`

Я надеюсь, что Это ясно теперь.

3
ответ дан 1 December 2019 в 16:16

Другие вопросы по тегам:

Похожие вопросы: