إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

سؤال بخصوص الملفات

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • gnu
    رد
    شكرا اخوي سيلنت ما شاء الله عليك ربي يحرسك من كل مكروه
    جاري التجربة وان شاء الله يكون كل شيء خير يا رب
    اعذرني واسف على الغلبه
    تحياتي لك

    اترك تعليق:


  • SilenCker
    رد
    السلام عليكم ورحمة الله

    آسف جدا على التأخر، نعم يمكنك فصل عملية إنشاء الملف ويمنك انشاءها يدويا عبر :
    كود:
    find /root/gnu/files -type f | while read file; do md5sum "$file" 1>>/root/out.txt; done
    وبالتعديلات التي طلبتها يصبح السكربت كالتالي:

    كود:
    #!/bin/bash
    
    SEARCH="/home/"
    DEPLACE="/root/scan"
    cd $HOME
    
    [ ! -d $DEPLACE ] && mkdir $DEPLACE
    find $SEARCH -type f > files.txt
    while read file; do 
        if [ $(egrep -c $(md5sum "$file" | awk '{print $1}') "/root/out.txt") -gt "0" ]; then
            mv "$file" $DEPLACE
        fi
    done <files.txt
    
    [ $(ls -lut | awk '{print $6}' | egrep -c $(date '+%Y-%m-%d')) -gt "0" ] && echo "New files" | mail -s "new files in $SEARCH" [email protected]
    ملاحظة: لم أجربه، جربه على مسؤوليتك

    تحياتي.

    اترك تعليق:


  • gnu
    رد
    السلام عليكم
    ارجوا اضافة سطر التنبيه البريدي في حال نقل اي ملف
    if [ "$email_*****" == "1" ]; then
    انتظركم

    اترك تعليق:


  • gnu
    رد
    الاخ SilenCker اشكرك جدا واحيك على تعبك وايضا لا انسى الاخرين شكار لكم
    تم تنفيذ السكربت ونجح والحمدلله فقط اريد تغيرات طفيفه وتصليح خطأ صغير

    الملفات التي ينقلها السكربت الى المجلد التالي
    /root/ppppp
    تكون لا يمكن قرائتها اي تظهر رموز وعبارات غير مفهمومه
    ------------------

    الأن التعديل الذي اريد ان اعمله على السكربت هو كالتالي
    حاليا انا على المسار التالي
    pwd
    root/gnu/files
    هذا المسار root/gnu/files
    يوجد به الملفات التي اريد ان يقوم بقرأة md5 لها
    كما قلنا 200 ملف على الاقل
    فقط اريد جمله لوب لها اي لا اريد وضعها داخل السكربت هذه الجمله
    لا دخل لها بسكربت تقوم بعمل قرأت الملفات وتوليد md5 لها وحفظ الملف في المسار التالي
    root/out.txt
    طبعا طريقة التخزين تكون كالتالي

    كود:
    d9e6b6f65c65dc0c0c420443066e941f gnu.sh
    d9e6b6f65c65dc0c04204430666e941f gnu2.sh
    d9e6b6f65c6420443066e941fooyyggg gnu1.sh
    d9e6b642044306dc0c0c4204430i941f gnu3.sh
    اي الهاش + اسم الملف
    اعتقد يمكن تحويل هذه الجمله الى امر ندخله في تيرمنال ويعمل المطلوب في الاعلى
    find root/gnu/files -type f | while read file; do md5sum "$file" 1>>root/out.txt"; done echo " finished "
    ------------------------------------------------
    الجزء الثاني
    هو يقوم بتأكد هل مجلد الذي سيقوم بنقل اليه موجود ام لا
    كود:
    if [ "`/root | egrep "scan"]
    	then
    		echo " yes found"
    		exit
    	else
    		echo " not found ";
    	then
    		mkdir /root/scan
    ----------------

    بعدها تحويل الجمله الثانية الى
    mv "$file" $DEPLACE && chmod 600 all file transfer DEPLACE /root/scan
    اي اضافة تصريح 600 الى الملفات

    كود:
    #!/bin/bash
    
    #place search
    SEARCH="/home/"
    # Transfer files with the same MD5
    DEPLACE="/root/scan"
    # Values md5 stored
    SEARCHMD5="/root/out"
    
    
    if [ "`root | egrep -c "scan"]
    	then
    		echo " yes found"
    		exit
    	else
    		echo " not found ";
    	then
    		mkdir /root/scan
    fi
    
    echo -en "" > $FOLDER"/out.txt"
    
    find $SEARCH -type f > files.txt
    while read file; do 
        if [ $(egrep -c $(md5sum "$file" | awk '{print $1}') "$FOLDER/out.txt") -gt "0" ]; then
            mv "$file" $DEPLACE && chmod 600 all file transfer  /root/scan
        fi
    done <files.txt
    فقط هذه التغيرات ويكون ان شاء الله السكربت جاهز من جميعه السكربت فقط يكون معه ملف out.txt و السكربت نفسه md5.sh
    ولا حاجة لكل مره انه يقرأ md5 للمجلد الذي يوجد به 200 ملف

    واشكرك جزيل الشكر

    اترك تعليق:


  • gnu
    رد
    الاخ 0 بلاك و الاخ سيلنت هاكر
    شكرا لكم جزيل الشكر والعرفان
    وسأقوم بالتجربة حاليا
    وسأرد لكم خبر بأذن لله بعد التجربه

    اترك تعليق:


  • SilenCker
    رد
    آسف على التأخر قرأت الموضوع الآن فقط.
    السكربت كالتالي:
    كود:
    #!/bin/bash
    
    FOLDER="/home/GNU/md5checks"
    SEARCH="/home/GNUFILES"
    DEPLACE="/root/ppppp"
    
    echo -en "" > $FOLDER"/out.txt"
    find $FOLDER -type f | while read file; do md5sum "$file" 1>>$FOLDER"/out.txt"; done
    find $SEARCH -type f > files.txt
    while read file; do 
        if [ $(egrep -c $(md5sum "$file" | awk '{print $1}') "$FOLDER/out.txt") -gt "0" ]; then
            mv "$file" $DEPLACE
        fi
    done <files.txt
    كانت قد جاءتني فكرة كهذه في وقت سابق للبحث عن ملفات ضارة لكن لم أنفذها لأسباب طرحها الأخ إيهاب الجداوي.

    ملاحظة: لم أجرب السكربت، كتبته الآن وبسرعة والتجريب على مسؤوليتك

    تحياتي.

    تعديل: السكربت عند تفيذه لا يُظهر أي رسالة (يعمل صامتا) لهذا يمكنك التعديل عليه لكي يُظهر بع الرسائل على حسب رغبتك لكي لا تشعر بالملل أثناء تنفيذه.

    اترك تعليق:


  • 0BLACK0
    رد
    السلام عليكم ورحمه الله وبركاته

    اخى الكريم اعتذر لتأخرى وذلك لانى كنت مسافر

    لقد كتبت هذا البرنامج من فتره والغرض منه كان وجود الكثير من الفيروسات التى اكتشفتها
    ولم يستطع برنامج الانتى فيروس الخاص بالشركه ان يكتشفها فكنت اقوم بأخذ ال md5 للفيروسات
    ثم عمل سيرش بهذا البرنامج لمطابقه ال md5 لجميع ملفات اجهزه الشركه واذا وجد فانه يكون فيروس

    وقد قمت بعمل بعض التعديلات على البرنامج الاصلى لكى يلائم ما طلبته على حسب فهمى

    اولا :
    يقوم البرنامج بالبحث فى مجلد باسم md5checkss لا تنسى ان هناك حرفين s وهذا الملف لابد ان يتواجد فى نفس مسار البرنامج هذا المجلد يحتوى على عده ملفات بامتداد .md5 دوت ام دى فايف
    وهذه الملفات هى ملفات نصيه وتحتوى بداخلها على ال md5 المراد البحث عنه كالتالى

    ملف x.md5
    كود:
    [LEFT] a044a2a0c8103fc3e5b7e18b0f7de1c8
    1c6f1c48c560432893fd0cc8a2d579b0
    w015b9134dad7e29e7d2d6b5f5c8c2fc
    [/LEFT]
    ملف z.md5
    كود:
    [LEFT] c9e6b6f65c65dc0c0c420443066e941f
    d8e6b6f65c65dc0c04204430666e941f
    m7e6b6f65c6420443066e941fooyyggg
    h5e6b642044306dc0c0c4204430i941f
    [/LEFT]
    يقوم البرنامج بدمج اى ملفات بامتداد md5 مثل الملفين السابقين وانشاء ملف جديد فى مسار البرنامج تحت اسم final_md5.md5 وبهذا نكون قد قمنا بتجميع كل ملفات ال md5 ويقوم البرنامج بتحميل هذا الملف فى الذاكره ولذلك ينصح اذا كانت حجم ال md5 كبير ان تجد طريقه اخرى غير طريقتى لانها ستقوم بحجز مساحه كبيره من الذاكره

    ثانيا :
    يسأل البرنامج المستخدم عن المسار الذى يريد البحث فيه عن الفيروسات او الملفات وهى عمليه يتوقف وقتها على سرعه المعالج والذاكره وايضا كم المسارات فى المجلد وعدد الملفات به وايضا لابد ان تأخذ فى الاعتبار انه لابد من تشغيل البرنامج بصلاحيات الروت اذا اردت البحث فى مجلدات عليها صلاحيات

    ثالثا :
    يقوم البرنامج بمطابقه ال md5 لجميع الملفات التى وجدت بال md5 المخزنه بالذاكره واذا وجد تطابق فانه يقوم بطباعه عدد الملفات التى وجدت وايضا يقوم بطباعه مسارها

    اليك البرنامج
    test.py
    كود:
    [LEFT]# -*- coding: utf-8 -*-
    
    import sys, os, hashlib
    
    def md5_for_file(f, block_size=2**20):
        m=open(f)
        counter=0
        md5 = hashlib.md5()
        while True:
            counter+=1
            data = m.read(block_size)
            if not data:
                break
            md5.update(data)
        return (md5.hexdigest(),str(counter))
    
    def generate_md5_main(xpath):
        current_dir=xpath
        open_write_file=open(current_dir+os.sep+'final_md5.md5', 'w')
        xpath=unicode(xpath+os.sep+'md5checkss')
        file_dir=loop_for_files(xpath)
        if file_dir != 'error' and len(file_dir)>0:
            for md5_file in file_dir:
                if md5_file.endswith(".md5"):
                    open_file=open(md5_file, 'r')
                    reading_it=open_file.read()
                    open_file.close()
                    open_write_file.write(reading_it)
                    
        open_write_file.close()
        print 'collecting all md5 in one file -----> complete'
      
    def loop_for_files(xpath):
        if os.path.isdir(xpath):
            from_file_allpath=[] 
            for root, dirs, files in os.walk(xpath): 
                for name in files: 
                    fname = os.path.join(root, name) 
                    from_file_allpath.append(fname)
            return from_file_allpath
        else:
            print 'the path you enterd not exist'
            return'error'
        
    def main():
        xpath = os.getcwd() # the program root directory
        generate_md5_main(xpath) #generate "final_md5.md5" in the programe root
        open_file=open(xpath+os.sep+'final_md5.md5', 'r')
        reading_it=open_file.read()
        open_file.close()
        all_md5_dic=[]
        matched_files=[]
        
        for md5_line in reading_it.split('\n'):#reding all md5 from the generated file to memory
            ##warnning if the generated file is too big it will eat your memory
            md5_line=md5_line.strip()
            if md5_line!='':
                all_md5_dic.append(md5_line)
        
        print 'reading data to memory -----> complete'
        
        #ask the user for the place where to start searching for files
        print 50*'*'
        print "plz take care if u want to search in places with administrator permession you need to run the script as root"
        print "enter the path to search for matched file like '/home/x'"
        print 50*'*'+'\n'
        
        file_search_start=raw_input("enter the path : ")
    
        print '\n\tplease wait this may take some time depending on your cpu...'
        
        file_search_start=file_search_start.strip()
        file_dir=loop_for_files(file_search_start)#list all the fiels found
        
        print 'searching for all the files in the selected path -----> complete'
        print 'start to comparison this may take some time .....'
        
        if file_dir != 'error' and len(file_dir)>0:
            for found_file in file_dir:
                chek_md5=md5_for_file(found_file)#check the md5 of the file
                if str(chek_md5[0]) in str(all_md5_dic):#check if the md5 is in our memory database
                    matched_files.append(found_file)
        
        print 'comparison processing -----> complete'
        
        if len(matched_files)>0:
            print '\nwe found '+str(len(matched_files))+' matched files\n'+50*'-'
            for F_Matche in matched_files:
                print F_Matche#********you can do what ever you want here copy the file or move it*********
            print 50*'-'
        else:
            print 'we didnt found any match'
        
        
    if __name__ == '__main__':
        main()
    [/LEFT]
    تحذير لا تنسى انشاء مجلد باسم md5checkss بجانب ملف البرنامج وايضا لا تنسى الصلاحيات

    ارجو ان يكون هذا هو الكود الذى تبحث عنه

    اذا كان هناك اى استفسار لا تتردد فى السؤال


    ارجو منك الدعاء لى ولوالدى

    اترك تعليق:


  • gnu
    رد
    شكرا اخي ايهاب وارجوا ان لا اكون قد ازعجتك بطلي اعتذر لك
    ارجوا ان تستغل وقتك في امر يكون بالنفع والفائده لك وتتحفنا به هنا في المجتمع
    السكربت انا محتاجه في امر ما موكل لي بكتابته
    وهو موجوده بشكل نظري كامل في المشاركه رقم 16
    اما بالنسبة لهذه الجمله في الاخير
    فقد كتبت بالخطأ
    هذا بالنسبة للجزء الاول
    وشكرا لمساعدتك وجزاك الله كل خير

    اترك تعليق:

  • إيهاب الجداوي
    .: إدارة الموقع :.

  • إيهاب الجداوي
    رد
    الاسكريبت سيكون بطئ جدا وسيأخذ وقت طويل للتنفيذ فلماذا تحاتجه؟
    إذا كان أمرا ضروريا سنحاول مساعدتك إن شاء الله أما إذا لم يكن ضرورى فأعتقد انه لا داعى لإضاعة وقت فى كتابة اسكريبت بلا غرض مجدى
    آسف وأرجو أن تفهم مقصدى

    هذا بالنسبة للجزء الاول
    أفهم من ذلك أنه هناك أجزاء أخرى؟

    عموما إشرح فائدة الاسكريبت من فضلك

    اترك تعليق:


  • gnu
    رد
    السلام عليكم اخ ايهاب مشكور جدا على تعاونك يا غالي
    اخ ايهاب لو قسمنا مثلا القسم الاول من سكربت يأخذ القيم من مجلد موجود على المكان التالي
    /home/GNU
    اسم الملف هو مثلا md5checks
    موضوع فيه اكثر من 200 ملف منوعات الامتدادات
    هل يمكن ان نجعل الجزء الاول يقوم بقرأة الملفات الموجود في المجلد md5checks كامله لأنه من صعب انه نعمل 200 ملف بشكل يدوي هذا في الجزء الاول

    الجزء الثاني :
    نجعل القيم التالي يتم قرأتها من ملف md5checks تخزن في ملف اسمه out ليحفظ القيم md5 بها التي حسبناها اي يعني 200 ملف السابقات
    ونجعل التخزين يكون على الشكل التالي
    d9e6b6f65c65dc0c0c420443066e941f gnu.sh
    d9e6b6f65c65dc0c04204430666e941f gnu2.sh
    d9e6b6f65c6420443066e941fooyyggg gnu1.sh
    d9e6b642044306dc0c0c4204430i941f gnu3.sh
    اي الهاش + اسم الملف

    اما بالنسبة للجزء الثالث
    جزئية البحث داخل الجهاز
    اي يقوم السكربت بعمل هل بحث هل القيمة md5 الموجوده داخل ملف out متطابقه مع اي ملف داخل الجهاز طبعا يبحث من خلال القائمة الموجوده داخل ملف out ويقوم بمقارنتها مع الملف الموجود داخل الجهاز

    الجزئية الاخيره من السكربت

    هو ان يقوم بنقل الملف المتطابق مع md5 الموجود داخل ملف out الى المسار التالي داخل الجهاز
    /root/ppppp

    هذا ما اردت السكربت ان يقوم به
    واشكر الاخ ايهاب على مساعدته لي وانتظر البقية للمساعده وشكرا لكم
    اعذروني لجلي البرمجي في باتش شل وشكرا لكم








    هذا بالنسبة للجزء الاول

    اترك تعليق:

  • إيهاب الجداوي
    .: إدارة الموقع :.

  • إيهاب الجداوي
    رد
    هل هذا يفيدك ؟
    كود PHP:
    #!/bin/bash

    #Collect source file info
    SRC_FILE_SIZE=$(cksum "$1" cut -" " -f 2)
    SRC_FILE_SUM=$(md5sum "$1" cut -" " -f 1)

    find $-iname '*' -size ${SRC_FILE_SIZE}-print0 xargs -0 md5sum grep -"$1" grep "$SRC_FILE_SUMsed 's/\(\t\+\| \+\)/ /g' cut -" " -f 2 

    exit 
    هذا لكود يأخذ معاملين الأول هو الملف المراد البحث عن نسخ له والثانى هو الدليل المراد البحث فيه
    والناتج يكون أسماء الملفات يمكن تحويلها للحذف أو النقل إلى مكان آخر
    فى حالة النقل يجب أن تراعى أنه يمكن العثور على ملفات بنفس الاسم فى أماكن مختلفة وسيتم كتابتها فوق بعضها أى سيتم حذف ملفات <<< لا خوف من هذا فيجب أن يكون جميع الملفات نسخ لملف واحد
    فى النهاية يجب أن تستخدم الاسكريبت بحرص شديد حتى لا تفقد بيانات فلم تتم تجربتته جيدا!

    همسة : ما حاجتك لهذا الاسكريبت؟

    اترك تعليق:


  • 0BLACK0
    رد
    السلام عليكم ورحمه الله وبركاته

    معذره اخى فلم ارى موضوعك الا متأخرا لكثره الاعمال

    انا استطيع مساعدتك لكن باستخدام لغه بايثون
    فاذا كنت تريد الكود فقط اخبرنى وسأقوم بكتابته لك

    اترك تعليق:


  • gnu
    رد
    اول ثلاث اسطر يقوم بأستخراج ام دي 5 للملفات الموجود داخل مجلد md5s
    وبعدها ثلاث اسطر يقوم بحساب md5 لها
    والاخير يقوم بالبحث عنها داخل الجهاز
    اعتقد ان عملي خطأ ارجوا من المشرفين والاعضاء المساعده

    اترك تعليق:


  • gnu
    رد
    حاولت اكتب شوية اسطر من السكربت بما اني لا افقه شيء بالشل بس يكفي شرف المحاوله
    هل لأحد المساعده في تصحيح واكمال السكربت
    #!/bin/bash
    # read md5

    for file in `md5s` ; do
    md5sum gnu.sh /root/md5.out
    done

    for file in `md5s` ; do
    cat /root/md5.out
    done

    find . -type f -name "/root/md5.out"
    do
    /
    done

    اترك تعليق:


  • gnu
    رد
    هل من مساعده

    اترك تعليق:

يعمل...
X