Files
Snippets/Linux-Sammelsurium.md
T
2026-08-03 13:22:29 +02:00

4.6 KiB

Linux: Projekte ablegen, Dateien suchen/löschen und xargs

Projekte unter Linux organisieren

Es gibt keine feste Vorgabe, aber einige Verzeichnisstrukturen haben sich etabliert.

Für persönliche Entwicklungsprojekte

Empfohlen:

  • ~/Projects/
  • ~/Code/
  • ~/src/ (unter Entwicklern sehr verbreitet)

Beispiel:

/home/max/
├── Documents/
├── Downloads/
├── Projects/
│   ├── website/
│   ├── python-tool/
│   └── homelab/

Oder eine nach Git-Hosting strukturierte Variante:

~/src/
├── github.com/
│   └── benutzer/
│       ├── projekt1/
│       └── projekt2/
└── private/

Verzeichnis anlegen:

mkdir -p ~/Projects

oder

mkdir -p ~/src

Für mehrere Benutzer

Verzeichnis Zweck
/srv/ Gemeinsam genutzte Projekte oder Dienste
/usr/local/src/ Systemweiter Quellcode
/opt/ Installierte Drittanbieter-Software (nicht für eigenen Quellcode)

Dateien mit find suchen und löschen

Dateien nach Namen löschen

Alle .tmp-Dateien löschen:

find . -name "*.tmp" -delete

Erst suchen, dann löschen (empfohlen)

Dateien anzeigen:

find . -name "*.tmp"

Anschließend löschen:

find . -name "*.tmp" -delete

Mit Rückfrage löschen

find . -name "*.tmp" -ok rm {} \;

oder

find . -name "*.tmp" -exec rm -i {} \;

Nach Alter löschen

Logdateien, die älter als 30 Tage sind:

find . -name "*.log" -mtime +30 -delete

Leere Verzeichnisse löschen

find . -type d -empty -delete

Achtung

-delete löscht Dateien sofort und ohne Papierkorb.

Deshalb empfiehlt sich immer:

  1. find ohne -delete
  2. Ergebnisse prüfen
  3. -delete ergänzen

Beispiel:

find ~/Downloads -name "*.zip"

find ~/Downloads -name "*.zip" -delete

xargs erklärt

Was macht xargs?

xargs nimmt Eingaben (meist aus einer Pipe) entgegen und macht daraus Argumente für einen anderen Befehl.

Beispiel:

echo "a.txt b.txt c.txt" | xargs rm

Das entspricht:

rm a.txt b.txt c.txt

Typischer Einsatz mit find

Ohne xargs:

find . -name "*.log" -exec rm {} \;

Mit xargs:

find . -name "*.log" | xargs rm

xargs bündelt mehrere Dateinamen zu einem einzigen rm-Aufruf und ist dadurch oft effizienter.


Problem mit Leerzeichen

Angenommen, es gibt eine Datei:

Meine Datei.txt

Dann liefert:

find . -name "*.txt" | xargs rm

xargs trennt standardmäßig an Leerzeichen und Zeilenumbrüchen.

Es interpretiert:

./Meine Datei.txt

als zwei Argumente:

  • ./Meine
  • Datei.txt

Das führt zu Fehlern.


Die sichere Lösung

Deshalb verwendet man fast immer:

find . -name "*.txt" -print0 | xargs -0 rm

Warum?

  • find -print0 trennt Dateinamen mit einem Nullbyte (\0)
  • xargs -0 liest genau dieses Format

Dadurch funktionieren auch Dateinamen mit:

  • Leerzeichen
  • Tabs
  • Zeilenumbrüchen
  • Sonderzeichen

Platzhalter mit -I

Soll der Dateiname mitten im Befehl stehen:

find . -name "*.jpg" | xargs -I {} cp {} /backup/

Für jede Datei wird ausgeführt:

cp datei.jpg /backup/

Anzahl der Argumente begrenzen

seq 1 10 | xargs -n 3 echo

Ausgabe:

1 2 3
4 5 6
7 8 9
10

-n 3 bedeutet: maximal drei Argumente pro Befehlsaufruf.


Parallelisierung

Mehrere Prozesse gleichzeitig starten:

find . -name "*.png" | xargs -P 4 -n 1 convert

Parameter:

  • -P 4 → bis zu vier Prozesse parallel
  • -n 1 → ein Dateiname pro Prozess

Alternative ohne xargs

Viele moderne Befehle unterstützen bereits mehrere Dateien gleichzeitig.

Beispiel:

find . -name "*.log" -exec rm {} +

Das erreicht nahezu denselben Effekt wie:

find . -name "*.log" -print0 | xargs -0 rm

Merksätze

Projekte

  • Eigene Projekte → ~/Projects oder ~/src
  • Gemeinsame Projekte → /srv
  • Installierte Software → /opt

find

  • Dateien suchen:

    find . -name "*.txt"
    
  • Direkt löschen:

    find . -name "*.txt" -delete
    

xargs

  • Macht aus Pipe-Ausgabe Befehlsargumente.
  • Spart viele einzelne Programmaufrufe.
  • Immer sicher verwenden mit:
find . -print0 | xargs -0 <befehl>

Moderne Alternative

Wenn möglich:

find . -exec <befehl> {} +

Diese Variante ist oft einfacher und ebenso effizient.