helge_tore_hoyland Skrevet 22. juni 2010 Del Skrevet 22. juni 2010 Hei. Eg trøng eit bash-script for å slette ei spesifikk/fleire spesifikke filer/mapper frå fleire paralelle mapper. Eks: I ei mappe har eg mappene "ein", "to" og "tre". I "ein", "to" og "tre" har eg fila "deletemeg", som har same namn i alle mappene. Eg trøng eit skript som kan slette "deletemeg" frå alle("ein", "to" og "tre") mappene. Ser for meg å nytte "ls > test" for så å la ein repeterande komando gå gjennom fila "test" og slette "deletemeg" frå mappene som er lista opp i "test". Mvh Helge Tore Høyland Lenke til kommentar
stelar7 Skrevet 22. juni 2010 Del Skrevet 22. juni 2010 gjør ett søk og slett filen manuelt Lenke til kommentar
helge_tore_hoyland Skrevet 22. juni 2010 Forfatter Del Skrevet 22. juni 2010 gjør ett søk og slett filen manuelt Vel det er snakk om mange filer som alle begynner med "." i mange mapper, so eg orkar ikkje gjere det manuelt kvar gong. rm -r "mappenavn"/.* Denne vil slette alt som byrjar med . i ei mappe. Men eg har mange mapper som eg må gjere dette i og ville ha automatisert det. Lenke til kommentar
etse Skrevet 22. juni 2010 Del Skrevet 22. juni 2010 personlig er jeg ikke fan av bash og forstår ikke hvorfor folk fortsatt bruker bash når det finnes så utrolig gode verktøy der ute som erstatter det som f.eks. python. Gitt at du skal gjøre dette på din egen maskin, og ikke ment for å slette filer fra en uvedkommende sin maskin kan du jo bruke et python skript. (Last ned python fra www.python.org) Lagde et lite python skript som gjør akkurat det du spør etter, og ingenting mer. # -*- coding: utf-8 -*- import os # Get file name filnavn = raw_input("Hva heter filen du vil slette: ") # Interate through every folder mapper = os.listdir(os.curdir) for mappe in mapper: if os.path.isdir(mappe): filer = os.listdir(os.curdir + '/' + mappe + '/') # Iterate through every file in folder for fil in filer: if fil == filnavn: print "Sletter filen fra mappen: " + mappe os.remove(os.curdir + '/' + mappe + '/' + fil) Lenke til kommentar
helge_tore_hoyland Skrevet 23. juni 2010 Forfatter Del Skrevet 23. juni 2010 personlig er jeg ikke fan av bash og forstår ikke hvorfor folk fortsatt bruker bash når det finnes så utrolig gode verktøy der ute som erstatter det som f.eks. python. Gitt at du skal gjøre dette på din egen maskin, og ikke ment for å slette filer fra en uvedkommende sin maskin kan du jo bruke et python skript. (Last ned python fra www.python.org) Lagde et lite python skript som gjør akkurat det du spør etter, og ingenting mer. # -*- coding: utf-8 -*- import os # Get file name filnavn = raw_input("Hva heter filen du vil slette: ") # Interate through every folder mapper = os.listdir(os.curdir) for mappe in mapper: if os.path.isdir(mappe): filer = os.listdir(os.curdir + '/' + mappe + '/') # Iterate through every file in folder for fil in filer: if fil == filnavn: print "Sletter filen fra mappen: " + mappe os.remove(os.curdir + '/' + mappe + '/' + fil) Takk så mykje! Eg har ikkje erfaring med python, men bruker gjerne det om det trengs! Såg svært enkelt ut og. Helge Tore Høyland Lenke til kommentar
FraXinuS Skrevet 23. juni 2010 Del Skrevet 23. juni 2010 Tror dette skal fungere: find . -name .deletemeg -type f -exec echo "Sletter: {}" \; -delete Lenke til kommentar
helge_tore_hoyland Skrevet 23. juni 2010 Forfatter Del Skrevet 23. juni 2010 personlig er jeg ikke fan av bash og forstår ikke hvorfor folk fortsatt bruker bash når det finnes så utrolig gode verktøy der ute som erstatter det som f.eks. python. Gitt at du skal gjøre dette på din egen maskin, og ikke ment for å slette filer fra en uvedkommende sin maskin kan du jo bruke et python skript. (Last ned python fra www.python.org) Lagde et lite python skript som gjør akkurat det du spør etter, og ingenting mer. # -*- coding: utf-8 -*- import os # Get file name filnavn = raw_input("Hva heter filen du vil slette: ") # Interate through every folder mapper = os.listdir(os.curdir) for mappe in mapper: if os.path.isdir(mappe): filer = os.listdir(os.curdir + '/' + mappe + '/') # Iterate through every file in folder for fil in filer: if fil == filnavn: print "Sletter filen fra mappen: " + mappe os.remove(os.curdir + '/' + mappe + '/' + fil) Hei. Vil denne slette mapper og? Eller må han modifiserast litt for å få til det? Lenke til kommentar
snippsat Skrevet 25. juni 2010 Del Skrevet 25. juni 2010 (endret) Vil denne slette mapper og? Eller må han modifiserast litt for å få til det? For og gjøre dette i python ville jeg brukt shutil.rmtree Delete an entire directory tree; path must point to a directory (but not a symbolic link to a directory) Si du vil slette mappe en,to,tre,så vil denne koden gjøre det. Tatt med feilbehandling og test print,som kan være greit og gjøre når man vil gjør forandringer på filsystemet. import shutil, os def delete_folders(folders_list): try: for item in folder_to_delete: print 'Folder to delete %s' % item ##Test print(show folder to be delete) #shutil.rmtree(item) ##Activate this line and folder will be delete print 'Folder delete successfully' except os.error: print 'Folder dos not exit' if __name__ == '__main__': #List of folder to delete folder_to_delete = ['c:\\en', 'c:\\to', 'c:\\tre'] #Call function delete_folders(folder_to_delete) Endret 25. juni 2010 av SNIPPSAT Lenke til kommentar
Tankakern Skrevet 25. juni 2010 Del Skrevet 25. juni 2010 Er da veldig overkill å dra inn perl og python for slikt.. bash støtter wildcards, bare kjør noe sånt: rm {mappe1,mappe2,mappe3}/deletemeg Hvis mappene faktisk har samme navnestruktur som eksempelet over så skal det jo funke å kjøre rm mappe*/deletemeg Skal også funke å kjøre rm mappe*/*/deletemeg hvis du vil slette i undermapper etc. Vil du slette alle filene uavhengig av struktur i en undermappe, så bruk find-eksempelet. Lenke til kommentar
asicman Skrevet 30. juni 2010 Del Skrevet 30. juni 2010 personlig er jeg ikke fan av bash og forstår ikke hvorfor folk fortsatt bruker bash når det finnes så utrolig gode verktøy der ute som erstatter det som f.eks. python. Fordi et bourne/posix shell finnes på alle unix og linux distribusjoner og fordi det er utrolig enkelt å gjøre enkelte ting i (ba)sh. Helge kan gjøre som mange har vært inne på rm {ein,to,tre}/deletemeg Eller rm */deletemeg Dersom det er bare mappene ein,to og tre i denne katalogen. ba(sh) egner seg lite etter min mening hvis man har behov for å bruke komplekse datastrukturer. ba(sh) er også forholdsvis stabilt. Jeg har shell scripter jeg skrev på unix maskiner på 80-tallet som fortsatt virker. Python forandrer seg (satt på spissen) etter humøret til Guido. Jeg har Python kode jeg skrev for et par år siden som får warning om at funksjonalitet vil forsvinne. Jeg har sett Python script som oppdaterer andre Python script for å være kompatible med nyere implementasjoner. Lenke til kommentar
asicman Skrevet 30. juni 2010 Del Skrevet 30. juni 2010 Vel det er snakk om mange filer som alle begynner med "." i mange mapper, so eg orkar ikkje gjere det manuelt kvar gong. Oj, ny spesifikasjon som ikke er lik den du startet med. find ein to tre -maxdepth 1 -type f -name '.*' -delete Dersom du skal gjøre det i alle mappene i katalogen du står i og lenger ned enn første nivå mapper kan du forenkle det til: find . -type f -name '.*' -delete Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå