Linux begonnen

This commit is contained in:
Sven Riwoldt
2026-08-03 13:22:29 +02:00
parent 755297cad7
commit 82a2cadde7
+337
View File
@@ -0,0 +1,337 @@
# 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:
```text
/home/max/
├── Documents/
├── Downloads/
├── Projects/
│ ├── website/
│ ├── python-tool/
│ └── homelab/
```
Oder eine nach Git-Hosting strukturierte Variante:
```text
~/src/
├── github.com/
│ └── benutzer/
│ ├── projekt1/
│ └── projekt2/
└── private/
```
Verzeichnis anlegen:
```bash
mkdir -p ~/Projects
```
oder
```bash
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:
```bash
find . -name "*.tmp" -delete
```
---
## Erst suchen, dann löschen (empfohlen)
Dateien anzeigen:
```bash
find . -name "*.tmp"
```
Anschließend löschen:
```bash
find . -name "*.tmp" -delete
```
---
## Mit Rückfrage löschen
```bash
find . -name "*.tmp" -ok rm {} \;
```
oder
```bash
find . -name "*.tmp" -exec rm -i {} \;
```
---
## Nach Alter löschen
Logdateien, die älter als 30 Tage sind:
```bash
find . -name "*.log" -mtime +30 -delete
```
---
## Leere Verzeichnisse löschen
```bash
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:
```bash
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:
```bash
echo "a.txt b.txt c.txt" | xargs rm
```
Das entspricht:
```bash
rm a.txt b.txt c.txt
```
---
## Typischer Einsatz mit `find`
Ohne `xargs`:
```bash
find . -name "*.log" -exec rm {} \;
```
Mit `xargs`:
```bash
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:
```text
Meine Datei.txt
```
Dann liefert:
```bash
find . -name "*.txt" | xargs rm
```
`xargs` trennt standardmäßig an Leerzeichen und Zeilenumbrüchen.
Es interpretiert:
```text
./Meine Datei.txt
```
als zwei Argumente:
- `./Meine`
- `Datei.txt`
Das führt zu Fehlern.
---
## Die sichere Lösung
Deshalb verwendet man fast immer:
```bash
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:
```bash
find . -name "*.jpg" | xargs -I {} cp {} /backup/
```
Für jede Datei wird ausgeführt:
```bash
cp datei.jpg /backup/
```
---
## Anzahl der Argumente begrenzen
```bash
seq 1 10 | xargs -n 3 echo
```
Ausgabe:
```text
1 2 3
4 5 6
7 8 9
10
```
`-n 3` bedeutet: maximal drei Argumente pro Befehlsaufruf.
---
## Parallelisierung
Mehrere Prozesse gleichzeitig starten:
```bash
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:
```bash
find . -name "*.log" -exec rm {} +
```
Das erreicht nahezu denselben Effekt wie:
```bash
find . -name "*.log" -print0 | xargs -0 rm
```
---
# Merksätze
### Projekte
- Eigene Projekte → `~/Projects` oder `~/src`
- Gemeinsame Projekte → `/srv`
- Installierte Software → `/opt`
### `find`
- Dateien suchen:
```bash
find . -name "*.txt"
```
- Direkt löschen:
```bash
find . -name "*.txt" -delete
```
### `xargs`
- Macht aus Pipe-Ausgabe Befehlsargumente.
- Spart viele einzelne Programmaufrufe.
- Immer sicher verwenden mit:
```bash
find . -print0 | xargs -0 <befehl>
```
### Moderne Alternative
Wenn möglich:
```bash
find . -exec <befehl> {} +
```
Diese Variante ist oft einfacher und ebenso effizient.