Skrip python di bawah ini berfungsi. File tersembunyi disimpan secara terpisah di folder, serta file tanpa ekstensi.
Karena mungkin digunakan untuk tujuan yang lebih luas, saya menambahkan beberapa opsi:
- Anda dapat mengatur ekstensi yang ingin Anda kecualikan dari "reorganisasi". Jika Anda hanya ingin memindahkan semua, atur
exclude = ()
- Anda dapat memilih apa yang harus dilakukan dengan folder kosong (
remove_emptyfolders = True
atau False
)
- Jika Anda ingin menyalin file daripada memindahkannya , ganti baris:
shutil.move(subject, new_dir+"/"+name)
oleh:
shutil.copy(subject, new_dir+"/"+name)
Naskah:
#!/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()
JIKA ada risiko menimpa file duplikat yang tidak diinginkan
Dengan mengorbankan beberapa baris tambahan, kami dapat mencegah menimpa duplikat yang mungkin. Dengan kode di bawah ini, duplikat akan diubah namanya menjadi:
duplicate_1_filename, duplicate_2_filename
dll.
Naskah:
#!/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()
EDIT
Dengan mengingat OP, kita semua lupa menambahkan instruksi tentang cara menggunakan. Karena pertanyaan duplikat mungkin ( dan memang ) muncul, itu mungkin berguna.
Cara Penggunaan
- Salin salah satu skrip ke file kosong, simpan sebagai
reorganize.py
Di bagian kepala skrip, setel direktori yang ditargetkan (dengan file untuk ditata ulang):
reorg_dir = "/path/to/directory_to_reorganize"
(gunakan tanda kutip jika direktori berisi spasi)
kemungkinan ekstensi yang ingin Anda kecualikan (mungkin tidak ada, seperti di bawah):
exclude = ()
dan jika Anda ingin menghapus folder kosong sesudahnya:
remove_emptyfolders = True
Jalankan skrip dengan perintah:
python3 /path/to/reorganize.py
NB jika Anda ingin menyalin file daripada memindahkan , ganti:
shutil.move(subject, new_dir+"/"+name)
oleh:
shutil.copy(subject, new_dir+"/"+name)
Silakan coba dulu pada sampel kecil.
-iname '*.*'
harus mengurus kasus sudut saya khawatir tentang ... ide bagus!