Daha çox

Qovluqdakı faylları silin və mövcud qovluğa məhəl qoymayın

Qovluqdakı faylları silin və mövcud qovluğa məhəl qoymayın


Bir çox coğrafi işləmə addımı atdım və indi daxil olmaqla bütün faylları silməyi sevirəm nəticə, nəticə, _ qoşul, _interyenidən sinif onların adına. Bunu aşağıdakılarla edə bilərəm

glob.glob -da fl üçün glob import os (r "D:  Users  julia  erste_aufg  delete *result*"): os.rbove (fl) in f2 for glob.glob (r "D:  Users  julia  erste_aufg  delete *result*"): os.remove (f2) in glob.glob (r" D:  Users  julia  erste_aufg  delete *_ join*"): os.remove (f3) glob.glob -da f4 üçün (r "D:  Users  julia  erste_aufg  delete *_ inter*"): os.remove (f4) in f5 for glob.glob (r "D:  Users  julia  erste_aufg  sil *yenidən sinif*"): os.remove (f5)

bura bax.

Ancaq silməzdən əvvəl faylları olan qovluqda (iş sahəsində) bir nəticə qovluğu yaratdım və daha çox ehtiyac duyduğum geoprosessing addımlarının nəticələrini bu nəticə qovluğuna kopyaladım. Bu nəticə qovluğuna görə silmək üçün kod artıq işləmir. Silmək kodunun nəticə qovluğunu nəzərə almaması üçün nə edə bilərəm?

(Aşağıdakı kod, sualı daha aydınlaşdırmaq üçündür)

arcpy -dən idxal arcpy id env.workspace = r "env.workspace = r" D:  Users  julia  urban_A_sel "" #yeni qovluq # Yerli dəyişənləri təyin edin out_folder_path = env.workspace out_name = "nəticə qovluğu" # CreateFolder'i icra edin arcpy.CreateFolder_management (out_folder_path, out_name) newpath = env.workspace + "" + out_name out_gdb_path = newpath arcpy.CreateFileGDB_management (out_gdb_path, "output.gdb") outputWorkgace = new "outListspace = new" = arcpy.ListFeatureClasses ("*_ nəticə*") arcpy.FeatureClassToGeodatabase_conversion (resultList, outWorkspace)

Sizi düzgün başa düşsəm, os.walk istifadə edə və qovluqları direktorlardan silə bilərsiniz. Python sənədləri, bunun bir nümunəsini göstərir, bu, fluidmotion -un özündə olduğu kimi, ancaq keçiddədir.

os.path -dan os -ı idxal edin, kök, dirs, os.walk -dakı fayllar ('python/Lib/e -poçt') üçün getsize: çap kökü, "istehlak", çap məbləği (getsize (qoşul (kök, ad)) üçün fayllarda adı), "baytlar", len (fayllar), "CVS" dirsə "direkt olmayan faylları" çap edin: dirs.remove ('CVS') # CVS qovluqlarını ziyarət etməyin

Bəlkə bir az kobud, amma belə bir şey sınaya biləcəyiniz görünür

əgər os.path.split (os.path.dirname (f1)) [-1]! = 'nəticə qovluğu': os.remove (f1)

beləliklə, glob tam bir yolu geri qaytardıqdan sonra, bu yolun son qovluğunu çıxarıb 'nəticə qovluğu' ilə müqayisə edərdi - əgər kataloq fərqlidirsə, faylı silir.


Faylları kopyalamaq, daşımaq, silmək və idarə etmək üçün VBA kodu

VBA ilə proseslərin avtomatlaşdırılması çoxlu faylları kopyalamağı, daşımağı, silməyi və idarə etməyi əhatə edə bilər. Şükürlər olsun ki, VBA-nın bu vəzifələri yerinə yetirmək üçün bir çox daxili funksiyası var. Bu faylların mütləq Excel iş kitabları olması lazım deyil, hər hansı bir fayl növü ola bilər.

Nümunə faylını yükləyin

Bu yazı üçün nümunə faylı yükləməyi məsləhət görürəm. Sonra nümunələrlə birlikdə işləyə və həll yolunu görə biləcəksiniz, üstəlik fayl gələcəkdə istinad üçün faydalı olacaq.


Bu cmdletdəki Recurse parametri düzgün işləmir.

Bu cmdletdəki Recurse parametri səhv olduğu üçün əmr d fayllarını əldə etmək üçün Get-Childitem cmdlet-dən istifadə edir və onları Remove-Item cmdlet-ə ötürmək üçün boru kəməri operatorundan istifadə edir.

və nümunə olaraq bu alternativi təklif edir:

Buna görə də get-childitem -recurse'ı çıxarma maddəsinə daxil etməlisiniz.

@JamesCW: Problem hələ də PowerShell 4.0 -də mövcuddur

Başqa bir həll yolu sınadım və nəticə verdi: cmd.exe istifadə edin:

Yeniləyin: Windows 10 versiyası 1909 -dan başlayaraq (ən azından) 18363.657 qurun (Windows -u bilmirem Server versiyanızı yoxlamaq və qurmaq üçün winver.exe -ni işə salmaq üçün uyğun olan versiya və quruluş), DeleteFile Windows API funksiyası artıq sərgilənir sinxron davranış, hansı PowerShell-in Sil-Item və .NET-in System.IO.File.Delete / System.IO.Directory.Delete ilə bağlı problemləri dolayı yolla həll edir (amma maraqlıdır ki, yox cmd.exe 'nin rd /s) ilə.

Mövcud cavablar yumşaltmaq problem daha az baş verir, ancaq problemi həll etmir kök səbəbbuna görə uğursuzluqlar hələ də baş verə bilər.

Kaldır -Maddə -Recurse gözlənilmədən baş verir asinxron, sonda ona görə ki Fayl və qovluğun silinməsi üçün Windows API üsulları mahiyyətcə asenkrondur və Remove-Item bunun hesabını vermir.

Bu fasilələrlə, gözlənilmədən iki yoldan birində özünü göstərir:

Sizin vəziyyətiniz: Əsas qovluğu silməyə cəhd edilənə qədər bir alt qovluğun və ya faylın silinməsi hələ başa çatmamışdırsa, boş bir qovluğun özü silinə bilər.

Daha az rast gəlinən: Silindikdən sonra dərhal çıxarılmış bir qovluğun yenidən qurulması uğursuz ola bilər, çünki yenidən yaradılmağa cəhd edilənə qədər silinmə hələ başa çatmamışdır.

The problem təkcə PowerShell-in Sil-maddəsini deyil, həm də cmd.exe-nin rd /s-ni və .NET-in [System.IO.Directory] :: Delete () :

Windows PowerShell v5.1 / PowerShell Core 6.2.0-önizləmə.1 / cmd.exe 10.0.17134.407 / .NET Framework 4.7.03056, .NET Core 2.1, nə Remove-Item, nə rd /s, nə də [System.IO.Directory] :: Delete () etibarlı işləyir, Çünki onlar Windows API faylının/qovluğunun silinməsi funksiyalarının asenkron davranışını nəzərə almamaq:

A üçün xüsusi PowerShell funksiyası təmin edən bir etibarlı sinxron həll, bu SO cavabına baxın.


Nümayiş

Python 3.4 -də yenisi Path obyektidir.

İstifadəni göstərmək üçün bir kataloq və fayl yaratmaq üçün birini istifadə edək. Yolun hissələrinə qoşulmaq üçün / istifadə etdiyimizi unutmayın, bu əməliyyat sistemləri ilə Windows -da arxa xətlərin istifadə edilməsiylə əlaqədar problemlər üzərində işləyir (burada kimi arxa xətlərinizi iki qat artırmalı və ya r kimi xam sətirlərdən istifadə etməlisiniz) "foo bar"):

İndi onları silək. Əvvəlcə fayl:

Birdən çox faylı silmək üçün globbing istifadə edə bilərik - əvvəlcə bunun üçün bir neçə fayl yaradaq:

Sonra dünya nümunəsi üzərində təkrarlayın:

İndi qovluğun silinməsini göstəririk:

Bir qovluğu və içindəki hər şeyi silmək istəsək nə olar? Bu vəziyyət üçün shutil.rmtree istifadə edin

Kataloğumuzu və faylımızı yenidən yaradaq:

və qeyd edin ki, rmdir boş olmadıqda uğursuz olur, bu səbəbdən rmtree bu qədər əlverişlidir:

İndi rmtree idxal edin və qovluğu funksiyaya ötürün:

və hər şeyin silindiyini görə bilərik:


19 Cavablar 19

Rsync -dən istifadə etmək təəccübləndirici dərəcədə sürətli və sadədir.

@sarathın cavabı başqa bir sürətli seçimdən bəhs etdi: Perl! Onun göstəriciləri rsync -a -delete -dən daha sürətlidir.

və ya stat olmadan (bəzilərinin bununla daha sürətli ola biləcəyini söyləmək lazım olub -olmaması mübahisəlidir, digərləri isə onsuz daha sürətli olduğunu söyləyir):

Twitter -də kimsə -exec rm -f <> yerinə -delete istifadə etməyi təklif etdi

Bu, əmrin səmərəliliyini artırdı, yenə də hər şeyi keçmək üçün rekursiyadan istifadə edir.

Bəs belə bir şey haqqında: find/path/to/folder -name "filenamestart*" -type f -print0 | xargs -0rn 20 rm -f

-N parametri üçün arqumenti dəyişdirərək bir anda silinəcək faylların sayını məhdudlaşdıra bilərsiniz. Boşluqları olan fayl adları da daxil edilir.

Şərhlərdən birini genişləndirərək düşündüyünüzü etdiyinizi düşünmürəm.

Vəziyyətinizi simulyasiya etmək üçün əvvəlcə çoxlu fayl yaratdım:

Sonra uğursuz olacağımı gözlədim və sualda nə etdiyinizi sınadım:

-Exec rm <> ilə müqayisədə -delete test etmə fürsətim oldu və mənim üçün -silmək bu problemin cavabı idi.

-Delete istifadə edərək, 400.000 fayllıq bir qovluqdakı faylları rm -dən ən az 1.000 dəfə daha sürətli silin.

'Linux -da çox sayda faylı necə silmək olar' məqaləsi, təxminən üç dəfə daha sürətli olduğunu göstərir, amma testimdə fərq daha dramatik idi.

Rm -rf * yerinə rm -rf kataloqundan istifadə edin.

Başlanğıcda məzmunu təmizləmək və əldə edə biləcəyimiz qədər sürətli olduğunu düşünmək üçün kataloqdaykən rm -rf * edirdik. Ancaq sonra böyük mühəndislərimizdən biri ulduz işarələrindən ( *) istifadə etməməyi və bunun əvəzinə rm -rf qovluğu kimi ana qovluğa keçməyimizi təklif etdi.

Bunun necə fərq etməyəcəyi ilə bağlı bir qədər mübahisədən sonra, tapmağın üçüncü üsulu ilə birlikdə müqayisə etməyi qərara aldıq. İşdə nəticələr:

rm -rf kataloqu, rm -rf * dən təxminən 9 dəfə daha sürətlidir!

Deməyə ehtiyac yoxdur, o mühəndisə pivə aldıq!

İndi dizini silmək və yenidən yaratmaq üçün rm -rf kataloq mkdir kataloqundan istifadə edirik.

Yuxarıdakı -silmə seçimi haqqında: Yaratdığım və istəmədən gecə təmizləməyi unutduğum bir qovluqdakı çoxlu sayda (1M+ est) faylları silmək üçün istifadə edirəm. Diskimi/hissəmi təsadüfən doldurdum və tapıntıdan başqa heç nə onları silə bilməzdi. əmr. Yavaşdır, əvvəlcə istifadə edirdim:

Ancaq bu çox böyük bir zaman aldı. Bəzi faylları silmək üçün təxminən 15 dəqiqədən sonra başladı, amma mənim fikrimcə, nəhayət başladıqdan sonra saniyədə 10 saniyədən az müddətdə silindi. Beləliklə, sınadım:

bunun əvəzinə və hazırda işləməsinə icazə verirəm. Daha sürətli işlədiyi görünür, baxmayaraq ki, digər əmrin olmadığı CPU -ya son dərəcə vergi verir. Artıq bir saata yaxındır ki, işləyirəm və sürücümdə boş yer tutduğumu düşünürəm və bölmə tədricən "arıqlayır", amma hələ çox uzun müddət çəkir. Digərindən 1000 qat daha sürətli işlədiyinə ciddi şübhə edirəm. Hər şeydə olduğu kimi, mən də zamanla kosmosdakı ticarətə işarə etmək istədim. Ehtiyacınız olan CPU bant genişliyiniz varsa (edirik), ikincisini işə salın. CPU işlək vəziyyətdədir (iş vaxtı hesabatları):

Və yükün orta hesabla 30.00 -dan yuxarı getdiyini gördüm, bu sıx bir sistem üçün yaxşı deyil, amma normal olaraq az yüklənənlər üçün bir neçə saatdır. Sistemdəki digər şeylərin çoxunu yoxladım və hələ də cavab verirlər, buna görə də indi yaxşıyıq.


Bir az daha ətrafa baxdım və güc yolunu tapdım:

Göstərilən qovluqdan 8 gündən çox olan bütün faylları silin (önizləmə ilə)

(baş verməsi üçün -watif -i silin)

Jeffin PowerShell əmrini sevirəm, ancaq Windows maşınları üçün PowerShell olmadan alternativ bir vbs həlli üçün aşağıdakıları sınaya bilərsiniz.

& Ltfilename & gt.vbs olaraq qeyd edin və icra edin:

Üçüncü parametr [Action] isteğe bağlıdır. Onsuz & ltNoDaysSinceModified & gt -dən daha köhnə fayllar siyahıya alınacaq. D olaraq təyin edildikdə & ltNoDaysSinceModified & gt -dən daha köhnə faylları siləcək

olacaq siyahı c: Log faylları 8 gündən çox olan bütün fayllar

olacaq silmək c: Log faylları 8 gündən çox olan bütün fayllar


Kök olaraq işləyərkən belə faylı silmək mümkün deyil

Bir maşını RHEL 4 -dən 5 -ə köçürmə prosesindəyəm. Əslində təkmilləşdirmə etmək əvəzinə yeni bir VM yaratdıq (hər iki maşın bir buluddadır) və ikisi arasındakı məlumatları kopyalamaq prosesindəyəm.

Yeni maşından silməyim lazım olan, lakin kök olaraq işləyərkən belə aça bilmədiyim aşağıdakı fayla rast gəldim:

Bu fayl/ev/KULLANICI/içərisindədir, burada İSTİFADƏCİ maşını quran oğlanın hesabıdır. Köhnə maşında hesabı yoxdur, buna görə də ev qovluğunu silməyə çalışıram ki, yeni maşın köhnəsi ilə üst -üstə düşsün, amma aşağıdakı xətanı alıram:

(Fransız dilindən tərcümə: XXX silinə bilməz, əməliyyata icazə verilmir)

Aşağıdakı əmri istifadə etməyə çalışdım, amma bunun heç bir fərqi yoxdur:

ID 2003 ilə bir istifadəçi yaratmaq üçün yeganə seçimdir, yoxsa bunun başqa yolu var?

Rm -f istifadə etməyə çalışdım və eyni səhvimi alıram. Əvvəlcə chmod 777 istifadə edərək eyni cür səhv alıram.

Silməyə çalışdığım faylın olduğu qovluğu seçə bildim, buna görə də belədir:


TLDR - Sadəcə mənə əmrləri göstər

Çıxış nümunəsi budur:

Hər sətrin ilk simvoluna diqqət yetirin:

  • L / R, fayl / dir yalnız L eft və ya R ight dir -də görünür.
  • X, faylın hər iki tərəfdə göründüyünü, lakin eyni olmadığını bildirir (bu halda növbəti 11 simvol sizə daha çox məlumat verir. S, t və p, sbuz, time və səhsıralamalar-daha çox məlumat üçün man rsync cəhd edin və --itemize-dəyişiklikləri axtarın).

Windows Defender -in müəyyən sənədləri taramasını necə qarşısını almaq olar

Windows Defender Antivirus taramasından istisna etmək istədiyiniz müəyyən fayllarınız, qovluqlarınız, fayl növləriniz və prosesləriniz varsa, aşağıdakı addımları istifadə edin:

  1. Windows Defender Təhlükəsizlik Mərkəzi.
  2. Basın Virus və amp təhlükəsindən qorunma.

Düyməsini basın Virus və amp təhlükəsindən qorunma seçim.

Düyməsini basın İstisna əlavə edin düymə.

Windows Defender Antivirusundan istisna etmək istədiyiniz məzmunu seçin, məsələn:

  • Fayl - İstisna üçün yalnız bir fayl istisna olunur.
  • Qovluq - Alt qovluqlar daxil olmaqla bir qovluğu və məzmununu istisna edir.
  • Fayl növü - Faylları və qovluq yerlərini istisna etmək əvəzinə, antivirusu, yerləşdiyi yerdən asılı olmayaraq müəyyən bir uzantısı olan faylları görməməzliyə vura bilərsiniz.
  • Proses - Adı ilə fon proseslərini istisna edir.

Seçiminizə görə yeni istisnanı əlavə etmək üçün ekrandakı təlimatlara davam edin. (Məsələn, seçsəniz Fayl, sadəcə gözdən keçirmək və istisna etmək istədiyiniz faylı seçmək lazımdır. Və ya seçsəniz Fayl növü seçim olaraq, tarama zamanı atlamaq üçün yalnız fayl formatının uzantısını daxil etməlisiniz.)

Bu addımları tamamladıqdan sonra, saxta pozitivlərin qarşısını almaq üçün antivirusun taramasını istəmədiyiniz digər maddələri istisna etmək üçün təlimatları təkrar etməyiniz lazım ola bilər.

İstənilən vaxt, eyni təlimatları istifadə edərək istisnanı silə bilərsiniz, ancaq addım 5, maddəni seçdiyinizə əmin olun və vurun Sil düymə.

Daha çox Windows 10 qaynağı

Daha faydalı məqalələr, əhatə dairəsi və Windows 10 haqqında ümumi suallara cavablar üçün aşağıdakı mənbələrə daxil olun:

Narahat olmayın, Android APK'larını birbaşa Windows 11 -ə yükləyə bilərsiniz

Windows 11 əhəmiyyətli bir yeni xüsusiyyət gətirir: Android tətbiqlərini birbaşa ƏS -də işlətmək imkanı. İstifadəçilər Android tətbiqlərini Amazon mağazası vasitəsilə əldə edə bilsələr də, bəli, sevdiyiniz Android APK -nı da yükləyə biləcəyiniz təsdiqləndi.

TPM, Windows 11 və bu payızda bu yeniləməni əldə etmək nə deməkdir

Windows 11 -in yaxşı işləməsi üçün çox ciddi hardware tələbləri yoxdur, lakin Microsoft təhlükəsizlik üçün əlcəyi yerə atdı. Etibarlı Platform Modulu (TPM) tələb olunur və bunun mənası bəzi istifadəçilər üçün çox qarışıqlıq yaradır. İndiyə qədər bildiklərimiz budur.

Microsoftun müzakirə etmədiyi bir şey: Windows 11 -in məxfiliyi

Microsoft, Windows 11 -də məxfiliyi qəbul edir və bu, OS mesajlaşmasının irəliləməsi üçün böyük bir problem ola bilər.

Hərəkətdə olduğunuz zaman ən yaxşı PC çubuqlarıdır

Ani kompüter - sadəcə bir ekran əlavə edin. Ultra portativ kompüterin arxasında duran ümumi fikir budur, amma hansını istədiyinizi bilmək çətin ola bilər. Rahatlayın, sizi əhatə edirik!


12 Cavablar 12

Hər şeyi silmək üçün in qovluğu çıxarmadan bir qovluq yazın:

Nəzərə alın ki, /* hissəsi çox önəmlidir. * -Dən əvvəl boşluq qoysanız, indiki qovluğunuzdakı bütün sənədlər silinəcəkdir.

Eyni əmrdə rm, -r və * hamısı ilə çox diqqətli olun. Fəlakətli bir birləşmə ola bilərlər.

Yeniləyin: Tamam, gizli/nöqtəli fayllarınızın olduğunu başa düşdüm [əvvəlində nöqtələri olan fayl adları, e.x. .hidden] sonra bu fayllar bütöv qalacaq.

Həqiqətən, ən sadə həll orijinal sual olur:

Başqa bir şey, find 's -exec seçimini və ya xargs -ə (aşağıda) borudan istifadə etmək olardı:


Videoya baxın: 002 - Faylları istifadə qaydası - Qovluqlar haqqında