2017-02-19 3 views
-1

Ich habe eine Aufgabe, an der ich arbeite, aber ich habe ein Problem, es zu starten. Ein Teil des Aufgabentextes ist unten, was mir helfen kann, mich in die richtige Richtung zu bringen.Holen Sie alle Dateien aus einem Verzeichnis und legte sie in ein Array

Mein Hauptproblem ist, die Liste der Dateien in ein Array zu bekommen. Ich denke, wenn ich das kann, sollte der Rest einfach sein. Ich kann die Dateien in ein Array schieben, das als Argumente übergeben wird, aber ich weiß nicht, wie man alle Dateien aus einem Verzeichnis erhält, die in jede Datei in ein Array aufgeteilt werden.

Jede Hilfe würde sehr geschätzt werden!

+1

Warum benötigen Sie alle Dateien aus einem Verzeichnis? Die Aufgabe sagt das nicht. – melpomene

+0

Das vielleicht, dass ich die falsche Vorstellung davon habe, was die Frage stellt. So wie ich es interpretiere, möchte er in sein Verzeichnis schreiben und das Skript ausführen, um die Dateien in Typen zu organisieren. Diese Typen wären normale Dateien, symbolische Verknüpfungen, Verzeichnisse oder andere. Ich muss andere Befehle für dieses Skript ausführen, aber ich möchte nicht viel verraten. Gibt es eine andere Möglichkeit, diese Aufgabe zu interpretieren? vielleicht etwas, was ich vermisse? –

+0

Keiner von dem, was Sie gerade gesagt haben, ist Teil der Aufgabe, die Sie in Ihrer Frage zitiert haben. – melpomene

Antwort

2

Dank Benjamin W Kommentar: Gerade files=(*)

verwenden Oder, wenn Sie versteckte Dateien aufnehmen möchten, und wollen nicht mit leeren Ordner in Schwierigkeiten bekomme, verwenden diese (dank Freds Kommentar):

shopt -s nullglob dotglob 
files=(*) 
+1

Nicht mein DV, aber das ist eine umständliche Art zu sagen 'Dateien = (*)' –

+0

Sie haben Recht, ich bin zurückgeblieben ... – mfnalex

+1

Sie können nur die Antwort aktualisieren, nicht? :) –

0
#!/bin/bash 

shopt -s nullglob 
arr=(/home/*) 

for ((i=0; i<${#arr[@]}; i++)); do 
    echo "${arr[$i]}" 
done 
+1

Ohne 'shopt -s dotglob' werden Dateien mit Namen, die mit einem Punkt beginnen, nicht berücksichtigt (was in einem bestimmten Fall möglicherweise erforderlich ist). – Fred

+0

ja ... + 1 für die extra Klärung. Frage erwähnt keinen speziellen Fall ... nur alle Dot-Dateien entfernt! –

0

Dieses Skript überprüft, ob es irgendwelche Parameter ((($# == 0))) gegeben, und wenn nicht, ich wurde t verwendet set -- "$PWD", um den ersten Positionsparameter auf das aktuelle Verzeichnis . zu setzen.

Danach, for f (die für for f in "[email protected]" kurz ist) Schleifen über alle Parameter für die Verarbeitung.

#!/bin/bash 

(($# == 0)) && set -- "$PWD" 
for f; do 
    # Do something with f 
done 
+0

Es heißt '' 'wenn keine Parameter angegeben werden, nicht alle (nicht versteckten) Dateien im aktuellen Verzeichnis. – melpomene

+0

@melpomene Ich interpretierte das als "alles in' .' "... meinst du, es sollte nur das aktuelle Arbeitsverzeichnis sein? –

+0

Ja, weil es sich speziell bezieht auf "Dateisystemobjekte" (die Verzeichnisse und andere Dinge einschließen), nicht nur Dateien. – melpomene

Verwandte Themen