- Код Python для поиска всех вновь созданных, измененных и удаленных файлов во всех каталогах/подкаталогах, начиная с каталога /
- Ответы (3)
- Python for Data Recovery
- Python Installation
- Hex Editor
- Data Recovery using Python
- Download Data Recovery Script
- Recovering Other File Types
- Python-код для поиска всех вновь созданных, измененных и удаленных файлов во всех каталогах / подкаталогах, начиная с / directory
- 3 ответа
Код Python для поиска всех вновь созданных, измененных и удаленных файлов во всех каталогах/подкаталогах, начиная с каталога /
Я знаю, как перечислить все подкаталоги и файлы в дереве каталогов. Но я ищу способ перечислить все вновь созданные файлы, измененные и (если возможно) удаленные файлы во всех каталогах в дереве каталогов, начиная с корневого каталога.
Уточните, пожалуйста, что нового создано для вас. В течение последнего часа? Последний день? С года? Если вы знаете, как построить дерево каталогов, почему бы вам просто не использовать os.lstat для доступа к свойствам файла? — person hochl   schedule 11.11.2011
затем используйте st=os.lstat(filepath) и поле st.st_mtime и проверьте, меньше ли разница с текущим временем, чем 1800 — вот и все. — person hochl   schedule 11.11.2011
Ответы (3)
Вы можете найти все файлы, созданные или измененные за последние полчаса, посмотрев на «mtime» каждого файла:
import os import datetime as dt now = dt.datetime.now() ago = now-dt.timedelta(minutes=30) for root, dirs,files in os.walk('.'): for fname in files: path = os.path.join(root, fname) st = os.stat(path) mtime = dt.datetime.fromtimestamp(st.st_mtime) if mtime > ago: print('%s modified %s'%(path, mtime))
Чтобы создать список удаленных файлов, вам также потребуется список файлов 30-минутной давности. Более надежной альтернативой является использование системы контроля версий, такой как git . Создание фиксации всех файлов в каталоге похоже на создание моментального снимка. Затем команда
выведет список всех файлов, которые изменились с момента последней фиксации. В нем также будут перечислены файлы, которые были удалены.
Запуск приведенного выше кода дает следующую ошибку: Traceback (последний последний вызов): файл tsck.py, строка 13, в ? print(‘
изменен ‘.format(p=path,m=mtime)) AttributeError: объект ‘str’ не имеет атрибута ‘format’ — person nsh; 11.11.2011
Это настолько медленно, что мы можем найти другой способ, активировать систему, чтобы регистрировать вновь созданные файлы, а затем анализировать файлы журналов. или лучше добавить триггер для новой записи в журнале. Может помочь! — person pylover; 11.11.2011
@nsh: str.format был представлен в Python2.6. Для более ранней версии вы могли использовать форматирование строки в стиле %s . Я отредактирую свой пост, чтобы показать, что я имею в виду. — person unutbu; 11.11.2011
-newerXY reference Compares the timestamp of the current file with reference. The reference argument is normally the name of a file (and one of its timestamps is used for the comparison) but it may also be a string describing an absolute time. X and Y are place‐ holders for other letters, and these letters select which time belonging to how reference is used for the comparison. a The access time of the file reference B The birth time of the file reference c The inode status change time of reference m The modification time of the file reference t reference is interpreted directly as a time
Я построил это, чтобы заглянуть в каталог и выбрать измененные файлы за последний промежуток времени, а затем заменить текст в этих файлах. Этого сценария не было, и мне пришлось собрать его воедино из приведенного выше ответа, поэтому я подумал, что кто-то другой может его искать. — person Powerboy2; 30.09.2015
Пожалуйста, отредактируйте свой ответ с этой информацией. Кроме того, полный ответ должен содержать несколько строк, описывающих, что он делает. Прочтите следующую статью: Как написать хороший ответ? — person Mariano; 30.09.2015
Python for Data Recovery
In this post we’ll take a look at Python for data recovery.
We’ll be covering a script I made that reads through a disk (in this example, a USB) and checks for specific file signatures in an attempt to recover photos and images (.jpg) from said disk.
If you haven’t seen my previous post about data recovery using a hex editor, I highly recommend it since a lot of the knowledge from that post will be automated using this script.
I’ll also get into how you can use this script to search for other types of files later on… 😉
Let’s get into the tutorial!
Python Installation
Make sure you have Python 3 already installed in your system.
We’ll be using all native Python functions, so no additional libraries will be needed.
Hex Editor
I recommend installing a hex editor to check up on the results of the script manually at first.
That way you can verify that you are getting the results that you want from the script.
I would go with HxD hex editor for Windows and bless hex editor on Linux.
Data Recovery using Python
Once you have Python installed, we’re ready to get into the script.
Download Data Recovery Script
Note that some changes will have to be made, such as assigning the correct drive letter to open (on Windows) or the proper /dev/sdX mount location on Linux. I’m assuming you know this in advance.
For now, we’ll cover data recovery for JPG files specifically:
drive = "\\\\.\\X:" # Open drive as raw bytes fileD = open(drive, "rb") size = 512 # Size of bytes to read byte = fileD.read(size) # Read 'size' bytes offs = 0 # Offset location drec = False # Recovery mode rcvd = 0 # Recovered file ID while byte: found = byte.find(b'\xff\xd8\xff\xe0\x00\x10\x4a\x46') if found >= 0: drec = True print('==== Found JPG at location: ' + str(hex(found+(size*offs))) + ' ====') # Now lets create recovered file and search for ending signature fileN = open(str(rcvd) + '.jpg', "wb") fileN.write(byte[found:]) while drec: byte = fileD.read(size) bfind = byte.find(b'\xff\xd9') if bfind >= 0: fileN.write(byte[:bfind+2]) fileD.seek((offs+1)*size) print('==== Wrote JPG to location: ' + str(rcvd) + '.jpg ====\n') drec = False rcvd += 1 fileN.close() else: fileN.write(byte) byte = fileD.read(size) offs += 1 fileD.close()
- We start by opening the disk (replace the X: letter for desired disk)
- Then we read the first 512 bytes (this value can be changed for faster reading of bytes)
- Next we define some preliminary variables:
- Offset location: identifies the hexadecimal location on disk
- Data recovery mode: triggers once we match a file signature
- Recovered file ID: used for defining the recovered filenames
- Print out a message notifying the user of a file found in the hex location.
- Create a new file and open it in write binary mode.
- Then we’ll keep reading chunks of bytes ’til we reach the end of file signature (trailer).
- Once we do, we set data recovery mode to off and increment the filename ID.
Recovering Other File Types
If you’re interested in recovering other types of files, you will have to know the corresponding file signature. That is, the magic bytes that identify the starting of that specific type of file.
Take a look at this Wikipedia page that contains file signatures: List of file signatures
Alternatively, you can simply open a file of the desired type in a hex editor and check the first few bytes. Once you’ve done that, modify the script in the following line of code:
found = byte.find(b'\xff\xd8\xff\xe0\x00\x10\x4a\x46')
You’ll want to change the following characters: FF D8 FF E0 00 10 4A 46
Make sure to keep the \x as those identify the hexadecimal bytes in Python.
You’ll also have to modify the trailer (end of file signature) to match the specific file type as well.
For that, change the following line of code:
For jpg’s, the file finishes with: FF D9
So you’ll have to modify those with the trailer for whatever file type you are looking for.
Note that since FF D9 is two bytes, I manually add these to this line of code shortly after:
The +2 is a manual addition, so if your trailer is longer, change the +2 accordingly.
I have plans to expand this script into searching for multiple file signatures at once, but for now that’ll be it for this tutorial. If you have any questions, leave a comment below! See ya next time. 🙂
Python-код для поиска всех вновь созданных, измененных и удаленных файлов во всех каталогах / подкаталогах, начиная с / directory
Я знаю, как перечислять все подкаталоги и файлы в дереве каталогов. Но я ищу способ перечислить все вновь созданные файлы, измененные и (если возможно) удаленные файлы во всех каталогах в дереве каталогов, начиная с корневого каталога.
Пожалуйста, укажите, что было создано для вас. В течение последнего часа? Последний день? С какого года? Если вы знаете, как построить дерево каталогов, почему бы вам просто не использовать os.lstat для доступа к свойствам файла?
затем используйте st=os.lstat(filepath) и поле st.st_mtime и убедитесь, что разница с текущим временем меньше 1800 — вот и все.
3 ответа
Вы можете найти все файлы, созданные или измененные за последние полчаса, просмотрев «mtime» каждого файла:
import os import datetime as dt now = dt.datetime.now() ago = now-dt.timedelta(minutes=30) for root, dirs,files in os.walk('.'): for fname in files: path = os.path.join(root, fname) st = os.stat(path) mtime = dt.datetime.fromtimestamp(st.st_mtime) if mtime > ago: print('%s modified %s'%(path, mtime))
Чтобы создать список удаленных файлов, вам также нужно будет иметь список файлов 30 минут назад.
Более надежной альтернативой является использование системы контроля версий типа git . Сделать фиксацию всех файлов в каталоге — это сделать снимок. Затем команда
отобразит все файлы, которые были изменены с момента последнего коммита. В этом списке также будут удалены файлы, которые были удалены.
Выполнение приведенного выше кода выдает следующую ошибку: Traceback (последний вызов был последним): файл «tsck.py», строка 13, в? print (‘
модифицированный ‘. format (p = путь, m = mtime)) AttributeError: у объекта ‘str’ нет атрибута ‘format’
Это происходит так медленно, что мы можем найти другой способ, активировать систему для регистрации вновь созданных файлов, а затем проанализировать файлы журнала. или лучше добавить триггер для новой записи в журнале.
@nsh: str.format был введен в python2.6. Для более ранней версии вы можете использовать форматирование строки в стиле %s . Я отредактирую свой пост, чтобы показать, что я имею в виду.
from tempfile import mkstemp import shutil import os import datetime as dt import sys # gets the time frame we are going to look back and builds a placeholder list to passover the info from our mtime to slay now=dt.datetime.now() ago=now-dt.timedelta(minutes=480) passover=[] # the '.' is the directory we want to look in leave it to '.' if you want to search the directory the file currently resides in for root,dirs,files in os.walk('.'): for fname in files: path=os.path.join(root,fname) st=os.stat(path) mtime=dt.datetime.fromtimestamp(st.st_mtime) if mtime>ago: passover.append(path) def slay(file_path, pattern, subst): #Create temp file fh, abs_path = mkstemp() with open(abs_path,'w') as new_file: with open(file_path) as old_file: for line in old_file: new_file.write(line.replace(pattern, subst)) old_file.close() #Remove original file os.remove(file_path) #Move new file try: shutil.move(abs_path, file_path) except WindowsError: pass #we pass the passover list to the slay command in a for loop in order to do muiltple replaces in those files. for i in passover: slay(i,"String1","String2")
Я построил это, чтобы посмотреть в каталог и выбрать измененные файлы в течение последнего времени, а затем заменить текст в этих файлах. Этот сценарий не складывался, и мне пришлось собрать его воедино из приведенного выше ответа, поэтому я подумал, что кто-то другой может его найти.
Пожалуйста, измените ваш ответ с этой информацией. Кроме того, полный ответ должен состоять из нескольких строк, описывающих, что он делает. Пожалуйста, прочитайте следующую статью: Как мне написать хороший ответ?