Az ls paranccsal Linux alatt hogy lehet sorbarendezve kiíratni csupán számokat tartalmazó fájlneveket?
Sehogy. Kell, hozzá a grep is és egy jó reguláris kifejezés (<reg. kif.>). Ekkor valami ilyesmi lesz:
ls | grep <reg. kif.>
A reguláris kifejezésekben mindig gyenge voltam, így azt rád bízom.
Példa (bemenet):
0.jpg
1.jpg
2.jpg
33213_hh
3.jpg
4223
hozzajarulas.png
munkaltatoi_2.png
munkaltatoi.png
palyazoi.png
Egyszerű (de nem minden esetre működő) megoldás:
ls -1 --ignore="[^[:digit:]]*"
(így csak ls-el oldottuk meg, ellenben nem a várt eredményt kaptuk!)
Kimenet:
0.jpg
1.jpg
2.jpg
33213_hh
3.jpg
4223
Tökéletes megoldás:
ls | sed -e 's/\..*$//' | egrep '^[0-9]+$'
(ebben az esetben eltávolítom a kiterjesztéseket ha vannak, majd a végén csak a számokat tartalmazó bejegyzéseket jelenítem meg)
Kimenet:
0
1
2
3
4223
Mivel nem adtad meg mit használhatsz és mit nem, vagy mihez kell (feladat, vagy saját célból) így több megoldást is vázoltam. Válogass...
Helyesbítek nem tökéletes az sem, hiszen lemaradtak a kiterjesztések így hivatkozni azt nem tudsz rá. Tehát mint mondtam... attól függ mire kell!
Továbbá a sorba rendezést is kifelejtettem.
eddigikifejezés | sort -n
Ez megközelítés kérdése! Mi a fájlnév? Windows-os felfogással az utolsó pont előtti rész. Linux esetében pedig az egész, hiszen nincs kiterjesztés!
Tehát általánosságban fájlnévnek azt szoktuk azért hívni, ami a kiterjesztés előtt van - ha van kiterjesztés.
Számomra akkor sem ilyen egyértelmű, mert az esetek 99%-ban van a fájloknak kiterjesztése ami bár a linuxot hidegen hagyja, mégsem tekinthető a fájlnév részének az általános értelmezés szerint. Ha azt mondjuk alma.jpg-t nevezzük át körtére, akkor korte.jpg-re fogjuk és nem korte-re!
A feladat pontos ismerete nélkül egyébként hiába vitatkozunk... :)
Szerintem azzal lehet a probléma, hogy a listázás a számokat nem az értékük, hanem a karakterkódjuk alapján állítja sorba. Hogy ezt már kész nevek esetén lehet-e másképpen értelmeztetni, azt nem tudom, a szokásos megoldás az, hogy a fájlokat eleve megfelelő számú fölvezető nullával nevezed el. Így a (mondjuk) 2028.jpg, 405.jpg, 52.jpg, 7.jpg sorrendű fájlok a helyes 0007.jpg, 0052.jpg, 0405.jpg, 2028.jpg sorrendben listázódnak. A feladat ismerete nélkül nemigen lehet megítélni, hogy ez megoldás-e a problémádra, mindenesetre homályos emlékeim szerint a fájl-átnevező programok képesek így átalakítani a fájlneveket. Konkrét programot most nem tudok neked javasolni, mert indulok az egyéb dolgaim után, és nem emlékszem, hogy valaha mit használtam erre. Próbálj rákeresni:
Eredetileg ezek az inputok.:
file.1
file.2
file.3
file.4
....
file.n
Elvileg az ls -X kiterjesztés szerint rendez sorba...
De a fenti nevekre ez sem működött.
Linuxban shell scriptben átírtam őket.:
1
2
3
4
...
n
Azt hittem az ls, így már sorbarendezi őket, de tévedtem.
Az a baj, hogy más rendezési elv nem alkalmazható, mert pl. ha utolsó módosítás ideje alapján rendezem, akkor nem lesz sorrend, mivel a fájlok parallel futások eredményei, amelyek időben azserint értek véget, hogy mennyi számítást igényeltek az inputok...
További kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!