Använda FIND med flera bokstäver [LÖST]

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
flierman
Inlägg: 240
Blev medlem: 12 aug 2007, 22:18
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Östersund, Sweden

Använda FIND med flera bokstäver [LÖST]

Inlägg av flierman »

Jag letar filer som börjar med bokstaven l i befintlig katalog

Kod: Markera allt

find . -name I*
1) När jag söker på -name får jag upp mappar som startar med den bokstaven, jag vill bara ha filer..inte mappar...vad ska jag ändra på i sökningen?

2) Men om jag vill se både stora och små i, hur gör jag då?

3) Om jag vill se alla filer som startar med i eller l stora som små, hur gör jag då.

Finner inte ut detta hur jag än läser i mina papper..grrr
Senast redigerad av 1 flierman, redigerad totalt 5 gånger.
Användarvisningsbild
ajja
Inlägg: 682
Blev medlem: 15 dec 2007, 23:43
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Motala
Kontakt:

Re: Använda FIND med flera bokstäver e.t.c

Inlägg av ajja »

Flaggvalet -iname är inte bokstavskännsligt men det kommer att lista även kataloger av den enkla anledningen att i GNU/Linux betraktas filer och kataloger lika (DVS en katalog är en fil).
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Använda FIND med flera bokstäver e.t.c

Inlägg av mcNisse »

1. find . -name 'I*' -type f
2. find . -name '[Ii]*' -type f
Det finns en annan funktion än -name som söker case-insensitive, -iname 'i*'
3. se två (tycker att det låter som samma fråga)

I terminalen har du mansidor. man find hjälpe mig att -iname ;)
Användarvisningsbild
flierman
Inlägg: 240
Blev medlem: 12 aug 2007, 22:18
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Östersund, Sweden

Re: Använda FIND med flera bokstäver e.t.c

Inlägg av flierman »

Okay, tackar.

-iname var riktigt bra, även -type f

Tycker man-sidorna är lite virriga men ska försöka lära mig mer från dem. Nu ska jag exprimentera med find

Om jag nu vill packa dessa till ett arkiv samtidigt, stämmer denna rad?

Kod: Markera allt

tar -cvf testar.tar `find -iname [rp]* -type f`
Användarvisningsbild
flierman
Inlägg: 240
Blev medlem: 12 aug 2007, 22:18
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Östersund, Sweden

Re: Använda FIND med flera bokstäver e.t.c

Inlägg av flierman »

Jag får inte till kombinationen av ett sök-kommando och att packa dessa till en .tar fil.

När jag söker efter filer som börjar med bokstaven r eller s i mappen "Dokument" så fungerar det perfekt

Kod: Markera allt

find Dokument -iname '[rs]'`
När jag sedan vill packa dessa till ett arkiv så vägrar det fungera, vad gör jag fel?
tar -cvf testar.tar `find Dokument -iname '[rs]*'`
Det skapas ett arkiv men det innehåller filer som jag inte har en aning om varför de kommer med..börjar inte på r eller s....

Felsvar:
tar: Dokument/register: Funktion "stat" misslyckades: Filen eller katalogen finns inte
tar: betyg: Funktion "stat" misslyckades: Filen eller katalogen finns inte
tar: och: Funktion "stat" misslyckades: Filen eller katalogen finns inte
tar: arbeten.doc: Funktion "stat" misslyckades: Filen eller katalogen finns inte
tar: Avslut med felslutstatus fördröjd från föregående fel
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Använda FIND med flera bokstäver e.t.c

Inlägg av mcNisse »

Du har mellanslag i namnen och då fungerar inte den versionen du skriver in...
Prova med xargs istället.

Kod: Markera allt

find . -iname '[rh]*' -print0 | xargs -0 tar cfv testar.tar
Användarvisningsbild
flierman
Inlägg: 240
Blev medlem: 12 aug 2007, 22:18
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Östersund, Sweden

Re: Använda FIND med flera bokstäver e.t.c

Inlägg av flierman »

Ja byter jag namn på den filen så det inte blir några mellanslag så fungerar det, men ska det inte fungera bara för att det finns ett mellanslag i en fil? Den ska ju bara leta och skapa ett arkiv av de filer som startar på en viss bokstav..vad som följer sen är ju oviktigt.

Vad gör Xargs?
Användarvisningsbild
ajja
Inlägg: 682
Blev medlem: 15 dec 2007, 23:43
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Motala
Kontakt:

Re: Använda FIND med flera bokstäver e.t.c

Inlägg av ajja »

Mellanslag ses av skalet som ett specialtecken.
För att utesluta ett specialtecken (dvs, hindra bash från att läsa in dessa) så kan man vara tvungen att använda ett uteslutningstecken.
Pröva med att använd ett backslash '\' framför mellanslag.

Kommandot xargs används för att köra andra kommandon så många gånger som är
nödvändigt.
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Använda FIND med flera bokstäver e.t.c

Inlägg av mcNisse »

flierman skrev:Men den ska ju bara leta efter filer som börjar med r eller s, vad som kommer efteråt med mellanslag eller inte är ju irrelevant. Går det inte att kombinera tar med find på något sätt?
Mellanlag är inte irrelevata när du ger dem som argument till ett program. Kolla på dessa två kommandon:
tar cf foo.tar bar foo
och
tar cf foo.tar 'bar foo'
I det första exemplet påckas filerna bar och foo med i foo.tar och i det andra packas filen "bar foo" med.
Om du nu antar att ditt find kommando skulle hitta en fil med namnet 'bar foo' blir resultatet som det första exemplet, dvs tar försöker packa filerna bar och foo. Fel, fel eftersom bara filen 'bar foo' existerar.

[qoute]
Vad gör Xargs?
[/quote]
xargs skyfflar argument till kommandot. Det tar resultatet av find och skickar till tar. -print0 skiljer argumenten med 0 istället för mellanslag. -0 till xargs talar om att arumenten är skilda med 0 istället för space.


Såg att ajja redan svarat, men men.... :P
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: Använda FIND med flera bokstäver e.t.c

Inlägg av David Andersson »

flierman skrev:find -iname [rp]* -type f
Du får säkert ett mer konsistent beteende om du omsluter [rp]* med enkel- eller dubbel-fnuttar.

Det här är inte mot mellanslag i filnamn utan så att shell inte expanderar filnamnsmönstret innan find får det.

Prova echo find -iname [rp]* -type f och echo find -iname '[rp]*' -type f i olika kataloger för att se skillnaden.
Skriv svar

Återgå till "Terminalforum"