Wenn ich ein Verzeichnis voller Dateien und Unterverzeichnisse habe. Was ist der beste Weg, um nur die regulären Dateien aufzulisten, die alphabetisch vor einer bestimmten Zeichenfolge stehen?
Derzeit kann ich mit Bash am besten Folgendes tun:
for x in `find . -maxdepth 1 -type f | sort`
do
if [[ "$x" > './reference' ]]
then
break
fi
echo $x
done
Ich habe das Gefühl, dass es einen prägnanteren Weg gibt, dies zu tun, aber ich bin mir nicht sicher, was es ist. Irgendwelche Ideen?
awk '$0 >= "'"${FROM}"'" && $0 <= "'"${TILL}"'"'
Damit
sed
ist es prägnanter:Dies bedeutet, dass (nach dem Sortieren) die Referenzzeile (oder höher) und alle Zeilen, die auf die letzte Zeile folgen, gelöscht werden.
Der Befehl sed 'd' wird hier mit einem Adressbereich verwendet, wobei '/^./reference/' der Anfang und '$' das Ende des Bereichs ist. (Und '$' als Adresse bedeutet die letzte Zeile.)
quelle
Obligatorische zsh-Antwort, bei der mit dem
.
Glob-Qualifikationsmerkmal nur reguläre Dateien ausgewählt unde
weitere Übereinstimmungen ausgewählt werden:quelle
z.B.
script-name "$HOME" "reference"
...find
gibt nicht immer den führenden Wert aus./
, wie im Fall vonfind bin
oderfind /tmp
. Wenn Sie also nur die Basisnamen der Datei möchten, funktioniert dies.Update: Hinzugefügt tolower () für einen Fall unempfindlich Vergleich zu ermöglichen, die die erzeugt alphabetische Sortierung in der Frage erwähnt ...
Pipe es einfach
sort
nachawk
, wenn Sie es sortiert brauchen.quelle
$0 < ref
dass er funktioniert, aber da die Ausgabe von find keine Leerzeichen enthält, ist das $ 2-Feld nicht vorhanden. Vermisse ich etwas