একটি স্ক্রিপ্টের সাথে অক্সে সদৃশ ফাইলগুলি সন্ধান এবং সরিয়ে ফেলা হচ্ছে


11

প্রেরণ: http://www.chriswrites.com/2012/02/how-to-find-and-delete-dusedate-files-in-mac-os-x/ আমি কেবলমাত্র এর প্রথম সংস্করণ মুছতে এটি কীভাবে সংশোধন করব ? ফাইলটি এটি দেখে।

স্পটলাইট বা ইউটিলিটি ফোল্ডার থেকে টার্মিনাল খুলুন আপনি সিডি কমান্ড ব্যবহার করে (সাব-ফোল্ডারগুলি সহ) যে ডিরেক্টরিটি (ফোল্ডার) সন্ধান করতে চান তা পরিবর্তন করুন। কমান্ড প্রম্পটে সিডি টাইপ করুন উদাহরণস্বরূপ সিডি ~ / ডকুমেন্টস ডিরেক্টরিটি আপনার বাড়ির জন্য পরিবর্তন করতে ডকুমেন্টস ফোল্ডারে কমান্ড প্রম্পটে, নিম্নলিখিত আদেশটি টাইপ করুন:

find . -size 20 \! -type d -exec cksum {} \; | sort | tee /tmp/f.tmp | cut -f 1,2 -d ' ' | uniq -d | grep -hif  /tmp/f.tmp > duplicates.txt

ফাইলগুলি অভিন্ন কিনা তা নির্ধারণ করতে এই পদ্ধতিটি একটি সাধারণ চেকসাম ব্যবহার করে। সদৃশ আইটেমের নাম বর্তমান ডিরেক্টরিতে ডুপ্লিকেটস টেক্সট নামের একটি ফাইলে তালিকাবদ্ধ করা হবে। অভিন্ন ফাইলগুলির নাম দেখতে এটি খুলুন নকলকে মুছতে এখন বিভিন্ন উপায় রয়েছে। পাঠ্য ফাইলের সমস্ত ফাইল মুছে ফেলতে কমান্ড প্রম্পটে টাইপ করুন:

while read file; do rm "$file"; done < duplicates.txt

উত্তর:


4

প্রথমত, আপনাকে প্রথম কমান্ড লাইনটি পুনরায় অর্ডার করতে হবে যাতে ফাইন্ড কমান্ড দ্বারা প্রাপ্ত ফাইলগুলির ক্রম বজায় থাকে:

find . -size 20 ! -type d -exec cksum {} \; | tee /tmp/f.tmp | cut -f 1,2 -d   | sort | uniq -d | grep -hif  /tmp/f.tmp > duplicates.txt

(দ্রষ্টব্য: আমি ব্যবহৃত আমার মেশিনে পরীক্ষার উদ্দেশ্যে find . -type f -exec cksum {} \;)

দ্বিতীয়ত, প্রথম ডুপ্লিকেট ব্যতীত সমস্ত মুদ্রণের এক উপায় হ'ল সহায়ক ফাইল ব্যবহার করা /tmp/f2.tmp। তাহলে আমরা এর মতো কিছু করতে পারি:

while read line; do
    checksum=$(echo "$line" | cut -f 1,2 -d' ')
    file=$(echo "$line" | cut -f 3 -d' ')

    if grep "$checksum" /tmp/f2.tmp > /dev/null; then
        # /tmp/f2.tmp already contains the checksum
        # print the file name
        # (printf is safer than echo, when for example "$file" starts with "-")
        printf %s\\n "$file"
    else
        echo "$checksum" >> /tmp/f2.tmp
    fi
done < duplicates.txt

এটি /tmp/f2.tmpচালানোর আগে কেবল তা বিদ্যমান এবং খালি রয়েছে তা নিশ্চিত করুন , উদাহরণস্বরূপ নিম্নলিখিত কমান্ডগুলির মাধ্যমে:

rm /tmp/f2.tmp
touch /tmp/f2.tmp

আশা করি এটি সাহায্য করে =)


39

আর একটি বিকল্প fdupes ব্যবহার করা হয়:

brew install fdupes
fdupes -r .

fdupes -r .বর্তমান ডিরেক্টরিতে পুনরাবৃত্তভাবে সদৃশ ফাইলগুলি সন্ধান করে। যোগ -dসদৃশ মুছে ফেলতে - আপনি যা রাখা ফাইল অনুরোধ জানানো হবে; পরিবর্তে আপনি যুক্ত করা হলে -dN, fdupes সর্বদা প্রথম ফাইল রাখবে এবং অন্যান্য ফাইল মুছে ফেলবে।


7
fdupesঅসাধারণ! মোহন মত কাজ! ধন্যবাদ ভাই.!
racl101

3

আমি একটি স্ক্রিপ্ট লিখেছিলাম যা আপনার ফাইলগুলির বিষয়বস্তুর একটি হ্যাশ মেলানোর জন্য নাম পরিবর্তন করে।

এটি ফাইলের বাইটগুলির একটি উপসেট ব্যবহার করে তাই এটি দ্রুত, এবং যদি কোনও সংঘর্ষ হয় তবে এটি নামের মতো একটি কাউন্টার যুক্ত করে:

3101ace8db9f.jpg
3101ace8db9f (1).jpg
3101ace8db9f (2).jpg

এটি আপনার ফটোগুলির সাথে অন্য কারও সফ্টওয়্যারকে আপনার প্রয়োজনের চেয়ে বেশি বিশ্বাস না করে নিজেরাই ডুপ্লিকেটগুলি পর্যালোচনা করা এবং মুছে ফেলা সহজ করে তোলে।

স্ক্রিপ্ট: https://gist.github.com/SimplGy/75bb4fd26a12d4f16da6df1c4e506562

এখানে চিত্র বর্ণনা লিখুন


GIF প্রদর্শনের জন্য +1 করুন !!
NoobEditor

0

এটি মাইকেল সোসাই দ্বারা বিকাশ করা agগলফিলার অ্যাপ্লিকেশনটির সাহায্যে করা হয়েছে ।

tell application "EagleFiler"

      set _checksums to {}
      set _recordsSeen to {}
      set _records to selected records of browser window 1
      set _trash to trash of document of browser window 1
      repeat with _record in _records
          set _checksum to _record's checksum
          set _matches to my findMatch(_checksum, _checksums, _recordsSeen)
          if _matches is {} then
              set _checksums to {_checksum} & _checksums
              set _recordsSeen to {_record} & _recordsSeen
          else
              set _otherRecord to item 1 of _matches
              if _otherRecord's modification date > _record's modification date 
then

            set _record's container to _trash
            else
                set _otherRecord's container to _trash
                set _checksums to {_checksum} & _checksums
                set _recordsSeen to {_record} & _recordsSeen
            end if
        end if
    end repeat
end tell

on findMatch(_checksum, _checksums, _recordsSeen)

    tell application "EagleFiler"
        if _checksum is "" then return {}
        if _checksums contains _checksum then
            repeat with i from 1 to length of _checksums
                if item i of _checksums is _checksum then
                    return item i of _recordsSeen
                end if
            end repeat
        end if
        return {}
    end tell

end findMatch

আপনি এই পোস্টে প্রস্তাবিত সদৃশ ফাইল রিমুভার সহ ডুপ্লিকেটগুলি স্বয়ংক্রিয়ভাবে মুছতে পারেন ।


1
(1) "agগলফিলার" কী? এটি কি ম্যাকোসের অংশ? যদি না হয়, আপনি এটি কোথায় পাবেন? (২) তার মানে কি কোডের এক দীর্ঘ ব্লক (যেভাবে আমি এটি ঠিক করেছি)? (3) আপনার ইন্ডেন্টেশন ঠিক করুন। (4) ঠিক কীভাবে কেউ এটি ব্যবহার করে?
স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.