নীচে অজগর লিপিটি কাজ করে। লুকানো ফাইলগুলি কোনও ফোল্ডারে আলাদাভাবে সংরক্ষণ করা হয়, পাশাপাশি এক্সটেনশন ছাড়াই থাকা ফাইলগুলি।
যেহেতু এটি বিস্তৃত উদ্দেশ্যে ব্যবহার করা যেতে পারে তাই আমি কয়েকটি বিকল্প যুক্ত করেছি:
- আপনি "পুনর্গঠন" থেকে বাদ দিতে চান এমন এক্সটেনশানগুলি সেট করতে পারেন। আপনি যদি কেবল সমস্ত স্থানান্তর করতে চান তবে সেট করুন
exclude = ()
- খালি ফোল্ডারগুলি (
remove_emptyfolders = True
বা False
) দিয়ে কী করতে হবে তা আপনি চয়ন করতে পারেন
- আপনি যদি ফাইলগুলি সরানোর পরিবর্তে অনুলিপি করতে চান তবে লাইনটি প্রতিস্থাপন করুন:
shutil.move(subject, new_dir+"/"+name)
দ্বারা:
shutil.copy(subject, new_dir+"/"+name)
এই পান্ডুলিপি:
#!/usr/bin/env python3
import os
import subprocess
import shutil
# --------------------------------------------------------
reorg_dir = "/path/to/directory_to_reorganize"
exclude = (".jpg") # for example
remove_emptyfolders = True
# ---------------------------------------------------------
for root, dirs, files in os.walk(reorg_dir):
for name in files:
subject = root+"/"+name
if name.startswith("."):
extension = ".hidden_files"
elif not "." in name:
extension = ".without_extension"
else:
extension = name[name.rfind("."):]
if not extension in exclude:
new_dir = reorg_dir+"/"+extension[1:]
if not os.path.exists(new_dir):
os.mkdir(new_dir)
shutil.move(subject, new_dir+"/"+name)
def cleanup():
filelist = []
for root, dirs, files in os.walk(reorg_dir):
for name in files:
filelist.append(root+"/"+name)
directories = [item[0] for item in os.walk(reorg_dir)]
for dr in directories:
matches = [item for item in filelist if dr in item]
if len(matches) == 0:
try:
shutil.rmtree(dr)
except FileNotFoundError:
pass
if remove_emptyfolders == True:
cleanup()
যদি অযাচিত ওভাররাইটিং ডুপ্লিকেট ফাইলগুলির ঝুঁকি থাকে
কয়েকটি অতিরিক্ত লাইন ব্যয় করে আমরা সম্ভাব্য সদৃশগুলিকে ওভাররাইটিং প্রতিরোধ করতে পারি। নীচের কোড সহ, সদৃশদের নাম পরিবর্তন করা হবে:
duplicate_1_filename, duplicate_2_filename
প্রভৃতি
এই পান্ডুলিপি:
#!/usr/bin/env python3
import os
import subprocess
import shutil
# --------------------------------------------------------
reorg_dir = "/path/to/directory_to_reorganize"
exclude = (".jpg") # for example
remove_emptyfolders = True
# ---------------------------------------------------------
for root, dirs, files in os.walk(reorg_dir):
for name in files:
subject = root+"/"+name
if name.startswith("."):
extension = ".hidden_files"
elif not "." in name:
extension = ".without_extension"
else:
extension = name[name.rfind("."):]
if not extension in exclude:
new_dir = reorg_dir+"/"+extension[1:]
if not os.path.exists(new_dir):
os.mkdir(new_dir)
n = 1; name_orig = name
while os.path.exists(new_dir+"/"+name):
name = "duplicate_"+str(n)+"_"+name_orig
n = n+1
newfile = new_dir+"/"+name
shutil.move(subject, newfile)
def cleanup():
filelist = []
for root, dirs, files in os.walk(reorg_dir):
for name in files:
filelist.append(root+"/"+name)
directories = [item[0] for item in os.walk(reorg_dir)]
for dr in directories:
matches = [item for item in filelist if dr in item]
if len(matches) == 0:
try:
shutil.rmtree(dr)
except FileNotFoundError:
pass
if remove_emptyfolders == True:
cleanup()
সম্পাদনা
ওপিকে মাথায় রেখে, আমরা সকলে কীভাবে ব্যবহার করব সে সম্পর্কে একটি নির্দেশ যুক্ত করতে ভুলে গিয়েছিলাম। যেহেতু সদৃশ প্রশ্নগুলি ( এবং কর ) প্রদর্শিত হতে পারে, তবুও এটি কার্যকর হতে পারে।
কিভাবে ব্যবহার করে
- যে কোনও একটি স্ক্রিপ্টকে খালি ফাইলে অনুলিপি করুন, এটি সংরক্ষণ করুন
reorganize.py
স্ক্রিপ্টের প্রধান বিভাগে, লক্ষ্যযুক্ত ডিরেক্টরিটি সেট করুন (ফাইলগুলি পুনরায় সাজানোর জন্য):
reorg_dir = "/path/to/directory_to_reorganize"
(ডিরেক্টরিতে ফাঁকা স্থান থাকলে কোট ব্যবহার করুন)
সম্ভাব্য এক্সটেনশনগুলি আপনি বাদ দিতে চান (সম্ভবত কোনওটি নয়, নীচের মতো):
exclude = ()
এবং আপনি যদি পরে খালি ফোল্ডারগুলি মুছে ফেলতে চান:
remove_emptyfolders = True
কমান্ডটি দিয়ে স্ক্রিপ্টটি চালান:
python3 /path/to/reorganize.py
এনবি যদি আপনি সরানোর পরিবর্তে ফাইলগুলি অনুলিপি করতে চান তবে প্রতিস্থাপন করুন:
shutil.move(subject, new_dir+"/"+name)
দ্বারা:
shutil.copy(subject, new_dir+"/"+name)
একটি ছোট নমুনায় প্রথমে চেষ্টা করুন।
-iname '*.*'
কোণ ক্ষেত্রে আমি ... চমৎকার ধারণা চিন্তিত ছিলাম যত্ন নিতে হবে!