Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

OS Linux

Omgekeerde alfabetische lijst van mijn directory

Marcel de Reus
25 antwoorden
  • Weet iemand hoe ik een omgekeerde alfabetische lijst van mijn directory kan maken zonder gebruik te maken van ls en de opties ervan? Ook geen dir. Met [code:1:fd26fce773]echo *[/code:1:fd26fce773] kan ik een weergave geven van mijn directory, maar hoe doe ik dat omgekeerd? Ik heb dan waarschijnlijk niets aan [code:1:fd26fce773]echo[/code:1:fd26fce773].

    Weet iemand hoe?
  • Wat is het doel van die lijst, en waarom mag ls niet worden gebruikt?

    Max
  • Ik moest er even over na denken:

    [code:1:bc1c8f568c]
    #!/bin/sh

    set $(echo *)
    for i in 5 4 3 2 1; do
    eval y='$'$i
    echo $y
    done

    exit 0
    [/code:1:bc1c8f568c]

    Nu zit je al een endje in de goede richting. Je moet enkel nog even een count functie er tussen stoppen die het aantal resultaten van echo * telt. Dat mag je echter fijn zelf doen ;)
  • Ik ben nu bezig met linux trucjes.

    Ik heb een andere oplossing gevonden:

    [code:1:70bd416fc5]

    $ find ./ * |sort -r
    [/code:1:70bd416fc5]

    Wat vinden jullie ervan?
  • Ik had al naar sort -r gekeken, maar ik wist niet hoe het toe te passen. Ik wilde het op een file met de output van echo * doen, maar dat werkte dus niet.
    Overigens is deze oplossing niet juist aangezien nu ook de inhoud van de directories in de directories worden meegenomen. En dat voldoet dus niet aan de omschrijving omgekeerde alfabetische lijst.

    Waarom echo * | sort -r niet werkte komt waarschijnlijk doordat echo de output als 1 blok doorgeeft en find elke regel output los door stuurt, dat lijkt mij tenminste een logische verklaring.

    Dit soort truukjes zijn btw erg leuk om over na te denken. Dit soort vraagjes moet je vaker posten, geeft weer eens wat afwisseling.

    En wel goed werkende oplossing is overigens:
    [code:1:8c49f6d181]
    #!/bin/sh

    echo * > blaat
    set $(echo *)
    count=$(count blaat)

    while [ "$count" != 0 ]; do
    eval file='$'$count
    echo $file
    count=$(($count-1))
    done

    exit 0
    [/code:1:8c49f6d181]
    Dat wil zeggen, mits het programma count op mijn PC zou staan. Ik kan me herinneren dat ik dat programma vroeger had, maar kan het nu nergens vinden, op inet ook niet?
    Hij noemt nu de resultaten van echo * achterstevoren op.
  • Jouw oplossing lijkt mij te ingewikkeld en moet het makkelijker kunnen.

    Met
    [code:1:ba6df06c76]
    find * ./ | sort -r
    [/code:1:ba6df06c76]
    geef ik een omgekeerde aflabetische lijst van mijn directory, alleen worden de bestanden dan 2 keer weergegeven, 1 keer "normaal" en een keer met "./" ervoor. Weet iemand hoe ik dat kan verbergen cq niet laten vinden?
  • Ik ga de output van het commando niet posten aangezien dan al mijn files op straat liggen, maar als er subdirectories in de directorie staan waarin je het door jouw genoemde commando uitvoert dan rolt find die helemaal af, het resultaat is dus een enorme lijst en dat kan de bedoeling niet zijn.

    Zoiezo zul je toch waarschijnlijk het makkelijkst een klein script ervoor maken hoor, tenzij je het voor elkaar krijgt op de output van echo direct kunt omkeren met sort -r.

    Ik heb daarnet lopen kutten met perl die bewerkingen als split en sort kent, maar om een of andere reden worden de lege vakjes in de ouput van echo niet als spatie gezien. Daar zit hem ook het probleem in.
  • Marcel, nu je zo lekker bezig bent :D

    je zult je output vlgs. mij moeten forken om mbv. echo en sort ad. gang te kunnen.

    ff tip voor het dubbel opgeven van bestanden
    dus
    ./test.txt
    test.txt
    dit kun je denk ik ondervangen mbv. uniq
  • [quote:bbf49684d6="wstolk"]Marcel, nu je zo lekker bezig bent :D

    je zult je output vlgs. mij moeten forken om mbv. echo en sort ad. gang te kunnen.

    ff tip voor het dubbel opgeven van bestanden
    dus
    ./test.txt
    test.txt
    dit kun je denk ik ondervangen mbv. uniq[/quote:bbf49684d6]

    Dit bedoelde ik, ik denk dat het niet mogelijk is om dat te voorkomen met uniq.

    Zo heb ik geprobeerd:

    [code:1:bbf49684d6]
    find * ./ | sort -r | uniq -u
    [/code:1:bbf49684d6]

    En dan blijft het hetzelfde, dat komt denk ik doordat ./test.txt en test.txt als 2 onafhankelijke dingen wordt gezien.

    Misschien kan het op een andere manier… :P
  • Tja ls geeft IMHO de juiste dingen weer en si vlgs mij ook het makkelijkst.
    ls |sort -r
    en klaar
    maar waarom wil je ls (wat hiervoor eigenlijk gemaakt is) niet gebruiken ??
  • Omdat dit leuk is en je zo innovatief problemen leert aanpakken?

    Overigens kan het vast wel met uniq hoor, je kunt namelijk eerst door perl of sed met regexps de ./ eruit laten slopen en het resultaat daarvan naar uniq pipen, alleen dan heb je nog steeds het probleem dat find directories helemaal uitrolt en dan krijg je dus een totaal ander resultaat dan met
    ls | sort -r
  • Dit werkt wel goed als je dit tenminste bedoelt:
    for FILE in `find . -maxdepth 1` ; do basename $FILE; done | sort -r
  • Dat werkt idd prima!
  • kan ook nog zo:

    [b:33e57c00df]find . -maxdepth 1 -printf "%f
    " | sort -r[/b:33e57c00df]

    let op dat find ook de dotfiles vindt, terwijl echo * dat niet doet.

    maar waarom wil je ls niet gebruiken en find wel?

    [b:33e57c00df]ls -r1[/b:33e57c00df] doet het toch prima! (zonder dotfiles)
  • Het is geen kwestie van willen, maar het is gewoon grappig om zulke workarounds te verzinnen. Je zal maar eens een systeem moeten redden waar ls brak is ;)
  • als dat het geval is maak ik mij niet meer zo druk om omgekeerd sorteren :-) nee gekheid, ik vind het ook leuk om unix-commando's tot the limit te pushen. Zo kort en simpel mogelijk dat is altijd mijn doel :-)
  • Ik heb nog iets gevonden:
    [code:1:a907f98cb8]

    echo * | sort -r

    [/code:1:a907f98cb8]

    Korter en beter dan dit zonder ls kan niet! 8)

    Het is eigenlijk best wel leuk om dit soort problemen leren te tackelen dmv Linux basics, vaak komen mensen met ingewikkelde code om een simpel probleem op te lossen, die zijn dan vaak of te lui of kennen de basics niet. :oops:
  • [quote:28d9fa5e7a="sjalesho"]Ivaak komen mensen met ingewikkelde code om een simpel probleem op te lossen, die zijn dan vaak of te lui of kennen de basics niet. :oops:[/quote:28d9fa5e7a]

    Beetje vaag om na alle hulp mensen die met andere oplossingen komen lui te noemen :roll:

    Max
  • [quote:01834fa7e8="maximilaan"][quote:01834fa7e8="sjalesho"]Ivaak komen mensen met ingewikkelde code om een simpel probleem op te lossen, die zijn dan vaak of te lui of kennen de basics niet. :oops:[/quote:01834fa7e8]

    Beetje vaag om na alle hulp mensen die met andere oplossingen komen lui te noemen :roll:

    Max[/quote:01834fa7e8]

    Dat bedoelde ik niet, ik hoop dat niemand zich aangesproken voelt. :oops:
  • [quote:d7c4709ea1="sjalesho"]Ik heb nog iets gevonden:
    [code:1:d7c4709ea1]

    echo * | sort -r

    [/code:1:d7c4709ea1]

    Korter en beter dan dit zonder ls kan niet! 8)
    snip…
    [/quote:d7c4709ea1]
    Bij mij werkt ie niet. Ik krijg gewoon hetzelfde als met ls alleen met minder layout

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.