
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 -I
als auch --ignore
die Parameter für überprüft ls
, aber I
ignoriert nur den Superuser-Modus und --ignore
wird nicht unterstützt.
Hat jemand eine Idee, wie man ls
das mit einem anderen Befehl (z. B. grep
) macht?
Antwort1
Wenn Sie beispielsweise alle Dateien außer denen in einem bestimmten Verzeichnis auflisten möchten, notHere
können Sie den find
folgenden Befehl verwenden:
find . -path ./notHere -prune -o -type f -print
Erläuterung:
.
: das Verzeichnis, infind
dem die-path ./notHere
: Starten Sie eine Regel, die dem Pfad entspricht./notHere
-prune
: Verhindertfind
den Abstieg in das Verzeichnis mit der aktuellen Übereinstimmung-o
: fügen Sie ein hinzu,or
um 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 Versionenfind
mü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. find
hat oft eine integrierte Funktion, die dabei hilft, allerdings nicht die spezifischen Optionen für . Sie könnten das obige Flag durch ls
ersetzen und sehen, ob dieser Optionssatz für Sie nahe genug kommt:-print
-ls
ls
find . -path ./notHere -prune -o -type f -ls
oder wenn das nicht gut genug ist, hätten Sie find
den 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, -a
ist die einfachste Methode:
ls -la | grep -v skip_folder
wobei skip_folder
der 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"