Skip to main content

Suchen & Finden

"find" sucht nach Dateinamen

Bsp.: durchsucht ab dem aktuellen Ordner nach Dateien in dessen Inhalt loopback vorkommt

find . -name '*loopback*'

# Ergebnis
./.phoronix-test-suite/openbenchmarking.org/pts/network-loopback-1.0.1.zip
./.phoronix-test-suite/openbenchmarking.org/pts/serial-loopback-1.0.2.zip
./.phoronix-test-suite/test-profiles/pts/serial-loopback-1.0.2
./.phoronix-test-suite/test-profiles/pts/network-loopback-1.0.1

oder durchsucht ab dem aktuellen Ordner nach Dateien dessen Namen "loopback" beinhaltet

find . | grep loopback

# Ergebnis
./.phoronix-test-suite/openbenchmarking.org/pts/network-loopback-1.0.1.zip
./.phoronix-test-suite/openbenchmarking.org/pts/serial-loopback-1.0.2.zip
./.phoronix-test-suite/test-profiles/pts/serial-loopback-1.0.2
./.phoronix-test-suite/test-profiles/pts/serial-loopback-1.0.2/results-definition.xml

"grep" sucht in den Dateien

grep txt-RIn *'wiki' .

    -R rekursiv

    -I ignoriert Binärdateien

    -n Zeilennummern

    --exclude-dir=.git lässt Git-Ordner aus

    Suchen und ersetzen

    https://www.tecchannel.de/a/suchen-und-ersetzen-in-dateien-unter-linux,2033812

    Ein Datei durchsuchen und ersetzen

    sed -i "s/doof/lieb/g" /pfad/zur/datei

    Parameter g sucht weiter nach Treffer

    Alle Dateien im Ordner /tmp/ mit dem Anfang test durchsuchen und ersetzen

    Bsp.: sucht "doof" in allen Dateien mit test und ersetzt es mit "lieb"

    grep -rl doof /tmp/test* | xargs sed -i -e 's,doof,lieb,g'

    Das Gleiche mit dem Befehl find durchführen

    find /<Pfad>/<Dateien> -type f -exec sed -i 's/<alter Begriff>/<neuer Begriff>/g' {} \;

    Begrenzung der Verzeichnistiefe, die durchsucht werden sollen.

    mit -maxdepth:

    find /srv/ -maxdepth 3 -type f -exec sed -i 's/lan\.foo\.info/lan.foo.net/g' {} \;

    Oder nur bestimmte Dateitypen durchsuchen (viel schneller):

    # Nur Config-Dateien (Apache, PHP, etc.)
    find /srv/ -type f \( -name "*.conf" -o -name "*.php" -o -name "*.html" -o -name "*.xml" \) -exec sed -i 's/lan\.foo\.info/lan.foo.net/g' {} \;

    Oder bestimmte Verzeichnisse ausschließen:

    find /srv/ -type f -not -path "*/cache/*" -not -path "*/tmp/*" -not -path "*/logs/*" -exec sed -i 's/lan\.foo\.info/lan.foo.net/g' {} \;

    Was für Dateien/Dienste liegen unter /srv/? Dann kann ich den Befehl noch gezielter machen.

    Dateiname suchen und Anzahl anzeigen

    find / -type f -name "index.html"  | wc -l