Daugiau

Ištrinkite failus aplanke ir nepaisykite esamo aplanko

Ištrinkite failus aplanke ir nepaisykite esamo aplanko


Atlikau daug geografinio apdorojimo veiksmų ir dabar man patinka ištrinti visus failus, įskaitant rezultatas, rezultatas, _ prisijungti, _vidusir perklasifikuoti jų vardu. Aš galiu tai padaryti atlikdamas šiuos veiksmus

importuoti glob importuoti os for fl glob.glob (r "D:  Users  julia  erste_aufg  delete *result*"): os.remove (fl) f2 glob.glob (r "D:  Users  julia  erste_aufg  delete *result*"): os.remove (f2) f3 glob.glob (r" D:  Users  julia  erste_aufg  delete *_ join*"): os.remove (f3) f4 glob.glob (r "D:  Users  julia  erste_aufg  delete *_ inter*"): os.remove (f4) f5 glob.glob (r "D:  Users  julia  erste_aufg  ištrinti *reclass*"): os.remove (f5)

pasižiūrėk čia.

Bet prieš ištrindamas sukūriau rezultatų aplanką aplanke (darbo vietoje) su failais ir nukopijavau į šį rezultatų aplanką geografinio apdorojimo veiksmų rezultatus, kurių man taip pat reikia. Dėl šio rezultatų aplanko ištrinamas kodas nebeveikia. Ką daryti, kad ištrynimo kodas nepaisytų rezultatų aplanko?

(Kodas užrašytas tik tam, kad klausimas būtų aiškesnis)

importuoti archpy importuoti os iš arcpy import env env.workspace = r "env.workspace = r" D:  Users  julia  urban_A_sel "" # new folder # Nustatyti vietinius kintamuosius out_folder_path = env.workspace out_name = "resultfolder" # Vykdyti CreateFolder 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") outWorksist = = Rezultatas + naujas = arcpy.ListFeatureClasses ("*_ result*") arcpy.FeatureClassToGeodatabase_conversion (resultList, outWorkspace)

Jei teisingai suprantu, galite naudoti os.walk ir pašalinti aplanką iš diržų pavadinimų. „Python“ dokumentai rodo to pavyzdį, panašų į tai, ką turi „fluidmotion“, bet pats judėjimas.

importuoti os iš os.path importuoti prisijungti, getize root, dirs, failai os.walk ('python/Lib/email'): spausdinti root, "sunaudoja", spausdinti suma (getsize (join (root, name)) for vardas failuose), atspausdinkite „baitus“, len (failai), „ne katalogų failai“, jei „CVS“ į katalogus: dirs.remove („CVS“) # nelankykite CVS katalogų

gal šiek tiek griozdiškas, bet panašu, kad galite pabandyti kažką panašaus

jei os.path.split (os.path.dirname (f1)) [-1]! = 'resultfolder': os.remove (f1)

kad po to, kai „glob“ grąžins visą kelią, tai pašalins paskutinį kelio katalogą ir palygins jį su „resultfolder“ - jei katalogas yra kitoks, jis pašalins failą


VBA kodas failams kopijuoti, perkelti, ištrinti ir tvarkyti

Procesų automatizavimas naudojant VBA gali apimti daugelio failų kopijavimą, perkėlimą, ištrynimą ir valdymą. Laimei, VBA turi daug integruotų funkcijų, kad galėtų atlikti šias užduotis už mus. Šie failai nebūtinai turi būti „Excel“ darbaknygės, jie gali būti bet kokio tipo.

Atsisiųskite pavyzdinį failą

Rekomenduoju atsisiųsti šio įrašo pavyzdinį failą. Tada galėsite dirbti kartu su pavyzdžiais ir pamatyti, kaip sprendimas veikia, be to, failas bus naudingas ateityje.


Pakartotinis parametras šioje cmdlet neveikia tinkamai.

Kadangi šios cmdlet parametras Recurse yra klaidingas, komanda naudoja „Get-Childitem“ cmdlet, kad gautų noro d failus, ir naudoja dujotiekio operatorių, kad perduotų juos cmdlet šalinimui.

ir siūlo šią alternatyvą kaip pavyzdį:

Taigi turėtumėte nukreipti „get-childitem -recurse“ į pašalinimo elementą.

@JamesCW: Problema vis dar egzistuoja „PowerShell 4.0“

Išbandžiau kitą sprendimą ir jis veikė: naudokite cmd.exe:

Atnaujinti: Pradedant nuo „Windows 10“ 1909 versijos, (bent jau) sukurkite 18363.657 (Aš nežinau, kad „Windows“ Serveris versiją ir versiją, kuri atitinka „winver.exe“ paleidimą, kad būtų galima patikrinti jūsų versiją ir sudaryti), „DeleteFile Windows“ API funkcija dabar rodoma sinchroninis elgesys, kuris netiesiogiai išsprendžia problemas, susijusias su „PowerShell“ pašalinimo elementu ir .NET sistema.IO.File.Delete / System.IO.Directory.Delete (bet įdomu, ne su cmd.exe rd /s).

Esami atsakymai sušvelninti problemą, kad ji atsirastų rečiau, tačiau jie nesprendžia Pagrindinė priežastis, todėl vis tiek gali pasitaikyti nesėkmių.

Pašalinti elementą -Recurse netikėtai asinchroninis, galiausiai dėl to ,. „Windows“ API failų ir katalogų pašalinimo metodai iš esmės yra asinchroniniai ir „Pašalinti elementą“ į tai neatsižvelgiama.

Tai su pertrūkiais, nenuspėjamai pasireiškia vienu iš dviejų būdų:

Jūsų atvejis: Pašalinti tuščią katalogą gali nepavykti, jei jame esantis pakatalogas ar failas dar nebuvo baigtas, kol bus bandoma pašalinti pirminį katalogą.

Rečiau: pašalinto katalogo atkūrimas iškart po pašalinimo gali nepavykti, nes gali būti, kad pašalinimas dar nebuvo baigtas iki bandymo iš naujo sukurti.

The problema turi įtakos ne tik „PowerShell“ pašalintam elementui, bet ir cmd.exe failams bei .NET [System.IO.Directory] :: Ištrinti () :

Nuo Windows PowerShell v5.1 / PowerShell Core 6.2.0-preview.1 / cmd.exe 10.0.17134.407 / .NET Framework 4.7.03056, .NET Core 2.1, nei „Remove-Item“, nei „rd /s“, nei [System.IO.Directory] :: „Delete ()“ neveikia patikimai, nes jie nesugeba atsižvelgti į asinchroninį „Windows“ API failų/katalogų pašalinimo funkcijų elgesį:

Dėl pasirinktinė „PowerShell“ funkcija kuris numato a patikimai sinchroninis sprendimas, žiūrėkite šį TAIP atsakymą.


Demonstracija

„Python 3.4“ naujiena yra „Path“ objektas.

Naudokime vieną, kad sukurtume katalogą ir failą, kad parodytume naudojimą. Atminkite, kad mes naudojame /, kad sujungtume kelio dalis, tai išsprendžia problemas, kylančias tarp operacinių sistemų ir problemų, susijusių su pasvirųjų brūkšnių naudojimu sistemoje „Windows“ (kai reikia dvigubai padidinti atbulines brūkšnius, pvz., arba naudoti neapdorotas eilutes, pvz., R "foo bar"):

Dabar ištrinkime juos. Pirmiausia failas:

Mes galime naudoti „Globing“, kad pašalintume kelis failus - pirmiausia sukurkime tam kelis failus:

Tada tiesiog pakartokite globalinį modelį:

Dabar parodykite katalogo pašalinimą:

Ką daryti, jei norime pašalinti katalogą ir viską jame? Šiuo atveju naudokite shutil.rmtree

Atkurkime savo katalogą ir failą:

ir atkreipkite dėmesį, kad „rmdir“ nepavyksta, nebent jis tuščias, todėl „rmtree“ yra toks patogus:

Dabar importuokite rmtree ir perduokite katalogą funkcijai:

ir matome, kad visa tai buvo pašalinta:


19 Atsakymai 19

„Rsync“ naudojimas stebina greitai ir paprastai.

@sarath atsakyme paminėtas dar vienas greitas pasirinkimas: Perl! Jo etalonai yra greitesni nei rsync -a --delete.

arba be statistikos (galima diskutuoti, ar to reikia, kai kurie sako, kad su juo gali būti greičiau, o kiti sako, kad be jo greičiau):

Kažkas „Twitter“ pasiūlė vietoj -exec rm -f <> naudoti -delete

Tai pagerino komandos efektyvumą, tačiau vis tiek naudoja rekursiją viskam atlikti.

Ką apie kažką panašaus: rasti/path/to/folder/name "filenamestart*" -type f -print0 | xargs -0rn 20 rm -f

Galite apriboti vienu metu ištrinamų failų skaičių, pakeisdami parametro -n argumentą. Taip pat įtraukiami failų pavadinimai su tuščiais elementais.

Išplėsdamas vieną iš komentarų, nemanau, kad darai tai, ką, tavo manymu, darai.

Pirmiausia sukūriau daugybę failų, kad imituotų jūsų situaciją:

Tada išbandžiau tai, ko tikėjausi, kad nepavyks, ir kaip atrodo, kad darai klausimą:

Turėjau galimybę išbandyti -delete, palyginti su -exec rm <> ir man -delete buvo atsakymas į šią problemą.

Naudojant „-delete“, failai aplanke, kuriame yra 400 000 failų, ištrinami mažiausiai 1000 kartų greičiau nei rm.

Straipsnyje „Kaip ištrinti daug failų„ Linux ““ galima teigti, kad jis yra maždaug tris kartus greitesnis, tačiau mano bandyme skirtumas buvo daug dramatiškesnis.

Vietoj rm -rf * naudokite katalogą rm -rf.

Mes iš pradžių darėme rm -rf * būdami kataloge, norėdami išvalyti turinį ir manėme, kad tai buvo kuo greičiau. Bet tada vienas iš mūsų vyresniųjų inžinierių pasiūlė vengti naudoti žvaigždutes ( *) ir vietoj to perduoti pirminį katalogą, pvz., Katalogą rm -rf.

Po sunkių diskusijų apie tai, kaip tai nepakeis, nusprendėme jį palyginti su trečiuoju atradimo metodu. Štai rezultatai:

rm -rf katalogas yra maždaug 9 kartus greičiau nei rm -rf *!

Nereikia nė sakyti, kad nusipirkome tam inžinieriui alų!

Taigi dabar mes naudojame katalogą rm -rf mkdir, kad ištrintume katalogą ir jį sukurtume iš naujo.

Apie aukščiau pateiktą parinktį -delete: aš ją naudoju, kad pašalinčiau daug (1 mln.+) Failų iš laikino aplanko, kurį sukūriau ir netyčia pamiršau išvalyti kiekvieną naktį. Aš netyčia užpildžiau savo diską/skaidinį ir niekas kitas negalėjo jų pašalinti, išskyrus radinį. komandą. Tai lėta, iš pradžių naudojau:

Bet tai užtruko YPATINGAI daug laiko. Kai kurie failai buvo pašalinti maždaug po 15 minučių, tačiau spėju, kad po to, kai jis pagaliau prasidėjo, jis buvo pašalintas mažiau nei 10 sekundžių. Taigi, aš išbandžiau:

Vietoj to, aš leidžiu jam veikti. Atrodo, kad jis veikia greičiau, nors tai YPATINGAI apmokestina procesorių, kurio kita komanda nebuvo. Tai veikia maždaug valandą, ir aš manau, kad aš atgaunu vietos savo diske ir skaidinys palaipsniui „lieknėja“, tačiau tai vis tiek užtrunka labai ilgai. Aš labai abejoju, kad jis veikia 1000 kartų greičiau nei kitas. Kaip ir visuose dalykuose, aš tik norėjau atkreipti dėmesį į kompromisą erdvėje prieš laiką. Jei turite laisvą procesoriaus pralaidumą (mes turime), paleiskite pastarąjį. Mano procesorius veikia (veikimo laiko ataskaitos):

Ir aš mačiau, kad apkrova vidutiniškai viršija 30.00, o tai nėra gerai užimtai sistemai, tačiau mūsų, kuri paprastai yra mažai pakrauta, porą valandų gerai. Aš patikrinau daugumą kitų sistemos elementų ir jie vis dar reaguoja, todėl kol kas mums viskas gerai.


Dar šiek tiek apsidairiau ir radau galingą būdą:

Ištrinkite visus daugiau nei 8 dienų senumo failus iš nurodyto aplanko (su peržiūra)

(pašalinkite -ką, kad tai įvyktų)

Mylėkite Jeffo „PowerShell“ komandą, tačiau norėdami rasti alternatyvų „vbs“ sprendimą „Windows“ mašinoms be „PowerShell“, galite išbandyti šiuos veiksmus.

Išsaugoti kaip & ltfilename & gt.vbs ir vykdyti:

Trečiasis parametras [Veiksmas] yra neprivalomas. Be jo bus rodomi senesni nei & ltNoDaysSinceModified & gt failai. Kai jis nustatytas kaip D, jis ištrins failus, senesnius nei & ltNoDaysSinceModified & gt

valia sąrašą visi failai c: Log failai, senesni nei 8 dienos

valia Ištrinti visi failai c: Log failai, senesni nei 8 dienos


Nepavyko ištrinti failo, net kai jis veikia kaip root

Aš perkeliu mašiną iš RHEL 4 į 5. Užuot iš tikrųjų atlikęs naujovinimą, sukūrėme naują VM (abi mašinos yra debesyje), o aš kopijuoju duomenis tarp dviejų.

Susidūriau su šiuo failu, kurį turiu pašalinti iš naujos mašinos, bet negaliu, net kai jis veikia kaip root:

Šis failas yra/home/USER/, kur USER yra mašiną sukūrusio vaikino sąskaita. Jis neturi paskyros senoje mašinoje, todėl bandau pašalinti jo namų aplanką, kad naujasis aparatas sutaptų su senuoju, bet gaunu šią klaidą:

(išversta iš prancūzų kalbos: negalima pašalinti XXX, operacija neleidžiama)

Bandžiau naudoti šią komandą, bet tai nepakeitė:

Ar vienintelis pasirinkimas yra sukurti vartotoją su ID 2003, ar yra kitas būdas?

Bandžiau naudoti rm -f ir gaunu tą pačią klaidą. Aš gaunu tos pačios rūšies klaidą, pirmiausia naudodamas „chmod 777“.

Man pavyko išjungti aplanką, kuriame yra failas, kurį bandau ištrinti, taigi:


TLDR - tiesiog parodykite man komandas

Štai išvesties pavyzdys:

Atkreipkite dėmesį į pirmąjį kiekvienos eilutės simbolį:

  • L / R reiškia, kad failas / režimas rodomas tik L eft arba R ight rež.
  • X reiškia, kad failas rodomas iš abiejų pusių, bet nėra tas pats (tokiu atveju kiti 11 simbolių suteikia daugiau informacijos. S, t ir p vaizduoja skirtumus sIze, time ir patitinkamai, išmetimai-norėdami gauti daugiau informacijos, pabandykite man rsync ir ieškokite --itemize-changes).

Kaip neleisti „Windows Defender“ nuskaityti konkrečių failų

Jei turite tam tikrų failų, aplankų, failų tipų ir procesų, kuriuos norite neįtraukti į „Windows Defender Antivirus“ nuskaitymus, atlikite šiuos veiksmus:

  1. Atviras „Windows Defender“ saugos centras.
  2. Spustelėkite Apsauga nuo virusų ir stiprintuvų.

Spustelėkite Apsauga nuo virusų ir stiprintuvų variantas.

Spustelėkite Pridėkite išskyrimą mygtuką.

Pasirinkite turinį, kurį norite išskirti iš „Windows Defender Antivirus“, pavyzdžiui:

  • Failas - Neįtraukiamas tik vienas failas.
  • Aplankas - Neapima aplanko ir jo turinio, įskaitant poaplankius.
  • Failo tipas - Užuot išskyrę failus ir aplankų vietas, galite sukonfigūruoti antivirusinę, kad nepaisytų failų su konkrečiu plėtiniu, nesvarbu, kokia jų vieta.
  • Procesas - Neįtraukiami fono procesai pagal pavadinimą.

Tęskite ekrane pateikiamus nurodymus, kad pridėtumėte naują išskyrimą, atsižvelgiant į jūsų pasirinkimą. (Pavyzdžiui, jei pasirinksite Failas, jums tiesiog reikia naršyti ir pasirinkti failą, kurį norite išskirti. Arba, jei pasirinksite Failo tipas jei norite nuskaityti nuskaitymo metu, turite įvesti tik failo formato plėtinį.)

Kai atliksite šiuos veiksmus, gali tekti pakartoti instrukcijas, kad neįtrauktumėte kitų elementų, kurių nenorite, kad antivirusinė programa nuskaitytų, kad išvengtumėte klaidingų teigiamų rezultatų.

Bet kuriuo metu galite pašalinti išskyrimą naudodami tas pačias instrukcijas, bet toliau 5 žingsnis, būtinai pasirinkite elementą ir spustelėkite Pašalinti mygtuką.

Daugiau „Windows 10“ išteklių

Daugiau naudingų straipsnių, aprėpties ir atsakymų į dažniausiai užduodamus klausimus apie „Windows 10“ rasite šiuose šaltiniuose:

Nesijaudinkite, galite iš naujo įkelti „Android“ APK į „Windows 11“

„Windows 11“ suteikia naują reikšmingą funkciją: galimybę paleisti „Android“ programas tiesiogiai OS. Nors vartotojai gali gauti „Android“ programų per „Amazon“ parduotuvę, dabar buvo patvirtinta, kad taip, taip pat galite tiesiog įkelti savo mėgstamą „Android“ APK idel

TPM, „Windows 11“ ir ką reiškia šį rudenį atnaujinti

„Windows 11“ neturi per daug griežtų techninės įrangos reikalavimų, kad gerai veiktų, tačiau „Microsoft“ atsisakė saugumo. Būtinas patikimos platformos modulis (TPM), o tai reiškia, kad kai kuriems vartotojams kyla daug painiavos. Štai ką mes žinome iki šiol.

Vienas dalykas, apie kurį „Microsoft“ neaptarė: „Windows 11“ privatumas

Atrodo, kad „Microsoft“ privatumą „Windows 11“ laiko savaime suprantamu dalyku, ir tai gali tapti didele problema OS pranešimams.

Tai geriausios kompiuterio atmintinės, kai esate kelyje

Momentinis kompiuteris - tiesiog pridėkite ekraną. Tai yra bendra nešiojamojo kompiuterio idėja, tačiau gali būti sunku žinoti, kurio norite. Atsipalaiduokite, mes jus aprūpinome!


12 atsakymai 12

Norėdami viską pašalinti į katalogą nepašalinę katalogo, įveskite:

Atminkite, kad* dalis yra labai svarbi. Jei prieš * įdėsite tarpą, jis ištrins visus jūsų dabartinio katalogo failus.

Taip pat būkite labai atsargūs žaisdami su rm, -r ir * visomis toje pačioje komandoje. Jie gali būti pražūtingas derinys.

Atnaujinimas: Gerai, supratau, ar turite paslėptų/taškinių failų [failų pavadinimai su taškais pradžioje, pvz. .paslėptas], tai paliks tuos failus nepažeistus.

Taigi iš tikrųjų paprasčiausias sprendimas originalus klausimas yra:

Kitas variantas būtų naudoti parinktį find 's -exec arba vamzdį į xargs (žemiau):


Žiūrėti video įrašą: ახალციხის მერიასა და საკრებულოში ხელფასები გაიზარდა