find -regex-fråga [LÖST]

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

find -regex-fråga [LÖST]

Inlägg av Johnny Rosenberg »

Har experimenterat lite med find:

Kod: Markera allt

find . -type f -regex '.+\/[a-zåäö].*$'
Tanken är att finna alla filer vars namn börjar med en versal. Problem upstår dock om en mapp börjar med en versal, exempelvis fångas följande exempel upp av uttrycket ovan:
./MinMapp/blandat/MinFil
I och med att mappen ”blandat” börjar med en gemen spelar det ingen roll att själva filen börjar med en versal.

Så vad jag behöver är ett uttryck som betyder ”alla tecken utom” eller rätt och slätt ”inte”. Om vi använder samma tecken som i C, det vill säga ”!”, så skulle det kanske se ut så här:

Kod: Markera allt

find . -type f -regex '.+\/[a-zåäö][!\/]*$'
Alltså: Ett eller flera valfria tecken följt av ”/” följt av en gemen bokstav (a-ö) och därefter ett obegränsat antal tecken som som kan vara vad som helst utom ”/”.

Vad jag ska göra med detta sedan är att helt enkelt radera de berörda filerna. Jag har kollat och dubbelkollat att alla filer jag har i en viss mapp där filnamnet börjar på en gemen bokstav ha en dubblett med samma filnamn fast den börjar med en versal. Jag har nämligen klantat till det tidigare så att jag fått dessa dubbletter och nu är hårddisken nästan full…

Jag har också dubbelkollat att det inte finns någon fil med inledande gemen som inte har någon dubblett, så jag vet att det är säkert att ta bort dem. Jag har också en säkerhetskopia på en USB-hårddisk att ta till om något skulle gå snett, så att jag kan börja om från nuvarande utgångsläge. Tyvärr har jag ingen säkerhetskopia med samma tillstånd som det var innan jag klantat mig, eftersom jag inte upptäckte klanteriet förrän efter att jag hade gjort backup, så dubbletterna är alltså med på säkerhetskopian och det är alltså dessa jag vill få bort från såväl säkerhetskopia som på originalhårddisken.

Men som sagt, en ”inte”-möjlighet i ett reguljärt uttryck i find skulle lösa problemet.

I och för sig finns det väl något sorts dubblett-letarprogram också, har för mig att jag använt ett sådant för några år sedan, men det som är bra med terminalen är ju att man kan ”torrköra” och se hur det gick utan att man behöver köra skarpt…
Senast redigerad av 1 Johnny Rosenberg, redigerad totalt 10 gånger.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: find -regex-fråga

Inlägg av mcNisse »

Är det [^] du är ute efter?

Kod: Markera allt

echo x | grep [^x]
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: find -regex-fråga

Inlägg av Johnny Rosenberg »

mcNisse skrev:Är det [^] du är ute efter?

Kod: Markera allt

echo x | grep [^x]
Hm… jag trodde den betydde något i stil med ”början av strängen” i motsats till ”$”… Får kolla upp det… Kanske jag som missuppfattat som vanligt.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: find -regex-fråga

Inlägg av Johnny Rosenberg »

Johnny Rosenberg skrev:
mcNisse skrev:Är det [^] du är ute efter?

Kod: Markera allt

echo x | grep [^x]
Hm… jag trodde den betydde något i stil med ”början av strängen” i motsats till ”$”… Får kolla upp det… Kanske jag som missuppfattat som vanligt.
Nej, jag hade fel och du rätt. Ensam betyder ^ början av sträng, men inom [] betyder den det du säger.

Alltså borde följande fungera:

Kod: Markera allt

find . -type f -regex '.+\/[a-zåäö][^\/]*$'
Tackar!

Ska testa snarast.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Skriv svar

Återgå till "Terminalforum"