Schließen Sie ein Verzeichnis vom Befehl „ls -R“ in FreeBSD aus

Schließen Sie ein Verzeichnis vom Befehl „ls -R“ in FreeBSD aus

Ich möchte alle meine Dateien in einem Verzeichnis in FreeBSD 9.2 auflisten, aber ich möchte kein bestimmtes Verzeichnis einschließen. Ich habe sowohl die Parameter -Ials auch --ignoredie Parameter für überprüft ls, aber Iignoriert nur den Superuser-Modus und --ignorewird nicht unterstützt.

Hat jemand eine Idee, wie man lsdas mit einem anderen Befehl (z. B. grep) macht?

Antwort1

Wenn Sie beispielsweise alle Dateien außer denen in einem bestimmten Verzeichnis auflisten möchten, notHerekönnen Sie den findfolgenden Befehl verwenden:

find . -path ./notHere -prune -o -type f -print

Erläuterung:

  • .: das Verzeichnis, in finddem die
  • -path ./notHere: Starten Sie eine Regel, die dem Pfad entspricht./notHere
  • -prune: Verhindert findden Abstieg in das Verzeichnis mit der aktuellen Übereinstimmung
  • -o: fügen Sie ein hinzu, orum anzugeben, was passieren soll, wenn die erste Regel nicht zutrifft
  • -type f: nur Dateien abgleichen, nicht etwa Verzeichnisse (entfernen Sie dies, wenn Sie auch die Verzeichniseinträge sehen möchten)
  • -print: oft nicht erforderlich, da dies die Standardaktion ist, aber in einigen Versionen findmüssen Sie dennoch ausdrücklich angeben, dass das Ergebnis ausgedruckt werden soll

Sie erwähnen, dass Sie eine andere Ausgabe (speziell ls -ll) als nur die Liste der Dateinamen wünschen. findhat oft eine integrierte Funktion, die dabei hilft, allerdings nicht die spezifischen Optionen für . Sie könnten das obige Flag durch lsersetzen und sehen, ob dieser Optionssatz für Sie nahe genug kommt:-print-lsls

find . -path ./notHere -prune -o -type f -ls

oder wenn das nicht gut genug ist, hätten Sie findden gewünschten Befehl ausführen können, anstatt zu versuchen, die Ausgabe separat zu verarbeiten, wie:

find . -path ./notHere -prune -o -type f -exec ls -ll {} +

Antwort2

Ich verwende dieses Skript, um alle Ordner herauszufiltern, deren Namen mit „_“ beginnen. Bei Ordnern mit Leerzeichen funktioniert es wahrscheinlich nicht, aber Sie können es ändern.

#!/bin/sh

A=`ls /j/ | xargs | sed 's/_[a-z0-9]*//g' | awk '{$1=$1;print}'`
W=`echo $A | wc -w | tr -d '[[:space:]]'`
echo $W

Im Allgemeinen ist folgender Teil interessant:

ls some_folder | xargs | sed 's/_[a-z0-9]*//g'

Der reguläre Ausdruck _[a-z0-9]*enthält das Muster, das mit dem Namen abgeglichen werden soll, der ausgeschlossen werden soll.

Dies ist der Fall, wenn Sie Ordner ohne die Option auflisten möchten -a(nur Namen). Wenn Sie diese Option verwenden möchten, -aist die einfachste Methode:

ls -la | grep -v skip_folder

wobei skip_folderder Name ist, den Sie ausschließen möchten. Verwenden Sie Anführungszeichen, wenn der Ordner Leerzeichen enthält, z. B.:

ls -la | grep -v "skip folder"

verwandte Informationen