2017-08-29 16 views
0

Ich habe einen Ordner mit Audiodateien. Die meisten sind einzelne Sounds - oder SoundSprites - während einige Soundsprites in SpriteLists verkettet sind. Diese SpriteLists verwenden eine Namenskonvention mit einem _SL am Ende des Dateinamens. Wie kann ich zwei Arrays von soundSprites und spriteLists erstellen? Ich habe versucht, mit find die spriteLists auszuschließen etwa so:Bash - Dateien in verschiedene Arrays basierend auf dem Dateinamen trennen

soundSprites+=($(find . -maxdepth 1 ! -name "*_SL*")) 

Aber das fügt einen ./ vor jedem Dateinamen, die ich vermeiden will. Anstatt herauszufinden, wie man dann durch das Array iteriert und alle ./ entfernt, kann ich nur annehmen, dass es eine elegante Lösung dafür gibt, von der ich mir einfach nicht bewusst bin.

Jede Hilfe wird sehr geschätzt.

+0

Der '/' ist eine Funktion, sollten Sie froh sein, dass es da ist (sonst können Sie am Ende in Schwierigkeiten, wenn 'find' Dateien findet, deren Namen mit' -' beginnen und sie an einen Befehl übergeben, der denkt, dass es der Name einer Option ist, die nicht unterstützt wird. – tripleee

Antwort

3

Verwenden Sie nicht find hier; Dies schlägt bei Dateinamen fehl, die Zeichen enthalten, die die Shell zum Generieren von Wortteilen oder Pfadnamen verwenden wird. Verwenden Sie stattdessen ein Muster entworfen für Pfadnamengenerierung.

shopt -s extglob 
soundSprites+=(!(*_SL*)) 
+0

Arbeitete perfekt, danke! –

Verwandte Themen