Met Bash Sort bestanden sorteren als een baas

Ben je op zoek naar een manier om je bestanden te organiseren en er enkele bewerkingen op uit te voeren? Er zijn veel gevallen in programmeren waar je wat gegevens moet sorteren, zoals een lijst met bestanden. Het sorteren van bestanden met de Bash-opdrachten sort en ls zal je helpen de zaken georganiseerd te houden.

In deze zelfstudie leer je de grondbeginselen van het sorteren van bestanden en bestandsinhoud.

Laten we gaan sorteren!

Vereisten

Deze zelfstudie maakt gebruik van Ubuntu 20.04, maar elke Linux-distributie zal werken.

Bash Bestanden Alfabetisch Sorteren

Er zijn talloze manieren om bestanden te sorteren in Linux, maar laten we ons concentreren op de meest voorkomende manier, bestanden alfabetisch sorteren.

Start je terminal op en voer de onderstaande opdracht ls -l uit om een lijst met bestanden in een directory te krijgen in oplopende volgorde. De vlag -l vertelt de ls-opdracht om de geretourneerde output in een langlijstformaat af te drukken.

ls -l
Bash Sort to Sort Files Alphabetically

Standaard geeft de ls-opdracht bestanden weer in oplopende volgorde. Om de sorteervolgorde om te keren, geef je de -r-vlag door aan de ls -l-opdracht, zoals dit: ls -lr. Het doorgeven van de -r-vlag aan de ls -l-opdracht is van toepassing op andere voorbeelden in deze zelfstudie.

Het Gebruiken van Bash Sort om Bestanden te Ordenen op Grootte

In plaats van bestanden alfabetisch te sorteren, kunt u overwegen om bestanden op grootte te sorteren. Het is handig om bestanden op grootte te sorteren wanneer u prioriteit wilt geven aan het weergeven van de kleinste of grootste bestanden in een lijst.

Om bestanden op grootte te sorteren, geeft u de -S-vlag door aan het ls-commando om de lijst met bestanden op grootte te sorteren.

Voer de onderstaande opdracht uit om bestanden (ls) te lijsten die zijn gesorteerd op grootte in een lang lijstformaat (-lS).

ls -lS

Hieronder ziet u dat de opdracht de bestanden heeft gesorteerd op grootte in aflopende volgorde (van grootste naar kleinste formaat).

Om de sorteervolgorde om te keren (van kleinste naar grootste), voegt u de -r-vlag toe, zoals dit: ls -lSr

Sorting Files by Size

Bestanden sorteren op wijzigingstijd via Bash-sorteren

Als u doorgaat met het sorteren van bestanden op grootte, kunt u een situatie tegenkomen waarin u bestanden moet sorteren op het moment dat ze zijn gewijzigd. Bijvoorbeeld, u bent de naam van het bestand dat u heeft gemaakt vergeten en u herinnert zich alleen de tijd waarop u het bestand voor het laatst heeft gewijzigd.

Voer de onderstaande opdracht uit, waarbij de parameter -t het ls-commando vertelt om de bestanden op wijzigingstijd te sorteren.

ls -lt
Sorting Files in a Directory by Modification Time

Bestanden sorteren op bestandsextensie

Als u op zoek bent naar een bestand met een bepaald bestandstype, is het sorteren van bestanden op bestandsextensie de ideale oplossing.

Voer de onderstaande opdracht uit om bestanden (ls) in de werkmap te lijsten en te sorteren op basis van hun extensies (-lx).

ls -lX

Merk op dat de opdracht hieronder de bestanden met dezelfde extensie heeft gesorteerd in oplopende volgorde op basis van hun namen.

Sorting Files by File Extension

Het ordenen van inhoud in een tekstbestand

Tot nu toe heb je verschillende methoden geleerd om bestanden in een map te sorteren. Verplaats je focus van het ls-commando en probeer het sort-commando uit te voeren. Het sort-commando sorteert de inhoud van bestanden afhankelijk van de vlag die je toevoegt. Maar eerst heb je een bestand nodig met inhoud die je wilt wijzigen.

Voer het onderstaande commando uit om een tekstbestand met de naam ~/data/fruits.txt te maken met namen van fruit. De -e-vlag maakt de interpretatie van de backslash mogelijk om elk woord op een nieuwe regel te schrijven (\n).

echo -e "apple \nmango \nwatermelon \ncherry \norange \nbanana" > fruits.txt

Voer nu het onderstaande commando uit om elk woord in fruits.txt te sorteren.

sort fruits.txt

Hieronder zie je dat de inhoud van het bestand in oplopende volgorde is gesorteerd.

Sorting File’s Content Alphabetically in Ascending Order

Zonder vlaggen sorteert het sort-commando de bestandsinhoud standaard in oplopende volgorde. Om de sorteervolgorde om te keren, voeg je de -r-vlag toe aan het sorteercommando, zoals dit: sort -r fruits.txt. Het omgekeerd sorteren door de -r-vlag toe te voegen, geldt voor andere voorbeelden in deze tutorial.

Het sorteren van een lijst met getallen in een tekstbestand

Het commando om getallen te sorteren is vergelijkbaar met het sorteren van teksten in een bestand, maar je voegt in plaats daarvan de -n-vlag toe. Laten we eerst een bestand maken om te demonstreren hoe je numeriek een bestandsinhoud kunt sorteren.

Voer het onderstaande commando uit om een bestand met de naam ~/data/scores.txt te maken met willekeurige getallen, elk op een nieuwe regel.

echo -e "45 \n69 \n52 \n21 \n3 \n5 \n78" > scores.txt

Voer nu het onderstaande commando uit om de getallen (-n) in het ~/data/scores.txt-bestand te sorteren.

sort -n scores.txt

Je kunt hieronder de nummers zien die op volgorde staan, beginnend bij het kleinste nummer.

Sorting Numbers in a File

Sorteren van een lijst met versienummers in een tekstbestand

Mogelijk heb je een lijst met versienummers in een tekstbestand die je wilt sorteren. Voeg in dat geval de optie --version-sort toe om het voor elkaar te krijgen.

Om te laten zien hoe de optie --version-sort werkt, maak eerst een tekstbestand.

Voer de onderstaande opdracht uit om een tekstbestand met de naam ~/data/versions.txt te maken met willekeurige versienummers, elk op een nieuwe regel (\n).

echo -e "1.0.0.1 \n 6.2.1.0 \n4.0.0.2" > versions.txt

Voer nu de onderstaande opdracht uit om de versienummers te sorteren (--version-sort) in het bestand versions.txt. De optie --field-separator vertelt het sort-commando dat de nummers in elke versie worden gescheiden door een punt (.). Je kunt de veldscheider wijzigen naar elk teken dat de nummers in de vermelde versies in je tekstbestand scheidt.

sort --version-sort --field-separator=. versions.txt
Sorting Version Numbers from a Text File

Bash Sort om bestanden te vinden en te sorteren op bestandsextensie

Je hebt in de vorige voorbeelden enkele opdrachten uitgevoerd (ofwel ls of sort). Maar in programmeren moet je vaak twee of meer opdrachten samen gebruiken. Hoe? Door pijplijnen van de ene opdracht naar de andere te maken.

Voer het onderstaande commando uit om alle markdown-bestanden (`-iname “*.md”`) in de werkdirectory (`.`) te vinden en ze in alfabetisch aflopende volgorde te sorteren (`sort -r`). Probeer andere bestanden te vinden en te sorteren door `”*.md”` te vervangen door een andere bestandsextensie.

find . -iname "*.md" | sort -r
Finding and Listing Files in Alphabetically Descending Order

Als je de gesorteerde uitvoer liever wilt opslaan naar een tekstbestand in plaats van standaarduitvoer op de console, voeg dan de `–output` optie toe, zoals deze: `find . -iname “*.md” | sort -r –output=gesorteerd.txt`. De `–output` optie vertelt het `sort` commando om een uitvoerbestand te maken voor de gesorteerde lijst met bestanden.

Conclusie

Het doel van dit artikel was om je te leren over verschillende manieren van sorteren met behulp van Bash-commando’s op een Linux-machine. Je hebt nu geleerd om de lijst van bestanden te sorteren en de inhoud van bestanden te sorteren. Bovendien zou je ook moeten weten hoe je verschillende commando’s kunt combineren voor meer complexe bestandssortering.

Met deze nieuwe kennis als uitgangspunt, waarom zou je dan niet scripts maken om bestandslijsten en het sorteren van bestandsinhoud te automatiseren?

Source:
https://adamtheautomator.com/bash-sort/