Sida 1 av 1
Använda FIND med flera bokstäver [LÖST]
Postat: 27 okt 2008, 14:29
av flierman
Jag letar filer som börjar med bokstaven l i befintlig katalog
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
Re: Använda FIND med flera bokstäver e.t.c
Postat: 27 okt 2008, 14:47
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).
Re: Använda FIND med flera bokstäver e.t.c
Postat: 27 okt 2008, 14:49
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

Re: Använda FIND med flera bokstäver e.t.c
Postat: 27 okt 2008, 14:53
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`
Re: Använda FIND med flera bokstäver e.t.c
Postat: 03 nov 2008, 14:16
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
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
Re: Använda FIND med flera bokstäver e.t.c
Postat: 03 nov 2008, 14:38
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
Re: Använda FIND med flera bokstäver e.t.c
Postat: 03 nov 2008, 21:51
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?
Re: Använda FIND med flera bokstäver e.t.c
Postat: 03 nov 2008, 22:10
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.
Re: Använda FIND med flera bokstäver e.t.c
Postat: 03 nov 2008, 22:23
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....

Re: Använda FIND med flera bokstäver e.t.c
Postat: 04 nov 2008, 04:48
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.