Próbuję uzyskać listę nazw wszystkich plików obecnych w katalogu przy użyciu Node.js. Chcę wynik, który jest tablicą nazw plików. W jaki sposób mogę to zrobić?
javascript
node.js
directory-listing
resopollution
źródło
źródło
fs.readdir
działa, ale nie może używać wzorców globów nazw plików, takich jakls /tmp/*core*
. Sprawdź github.com/isaacs/node-glob . Globusy mogą nawet wyszukiwać w podkatalogach.readdir-recursive
Sprawdź moduł NPM, jeśli szukasz także nazw plików w podkatalogachOdpowiedzi:
Możesz użyć metod
fs.readdir
lubfs.readdirSync
.fs.readdir
fs.readdirSync
Różnica między tymi dwiema metodami polega na tym, że pierwsza jest asynchroniczna, dlatego musisz zapewnić funkcję zwrotną, która zostanie wykonana po zakończeniu procesu odczytu.
Drugi jest synchroniczny, zwróci tablicę nazw plików, ale zatrzyma dalsze wykonywanie kodu do czasu zakończenia procesu odczytu.
źródło
readdir
pokazuje także nazwy katalogów . Aby je przefiltrować, użyjfs.stat(path, callback(err, stats))
istats.isDirectory()
.ls
? Poczekaj, aż ktoś utworzy jakieś nazwy plików z osadzonymi spacjami iIMO najbardziej przekonującym sposobem na wykonanie takich zadań jest użycie narzędzia globalnego . Oto pakiet globalny dla node.js. Zainstaluj za pomocą
Następnie użyj symboli wieloznacznych, aby dopasować nazwy plików (przykład pochodzi ze strony internetowej pakietu)
źródło
cwd
w obiekcie opcji.glob
poza sobą? Na przykład. Chcęconsole.log
wyniki, ale nie w środkuglob()
?glob.sync(pattern, [options])
Metoda może być łatwiejsza w użyciu, ponieważ zwraca tablicę nazw plików, a nie oddzwanianie. Więcej informacji tutaj: github.com/isaacs/node-globPowyższa odpowiedź nie wykonuje jednak wyszukiwania cyklicznego w katalogu. Oto co zrobiłem dla rekurencyjnego wyszukiwania (za pomocą węzła-walk :
npm install walk
)źródło
.git
Pobierz pliki we wszystkich podkatalogach
źródło
if (typeof files_ === 'undefined') files_=[];
? musisz tylko zrobićvar files_ = files_ || [];
zamiastfiles_ = files_ || [];
.var fs = require('fs');
na początkugetFiles
.Oto proste rozwiązanie wykorzystujące tylko natywny
fs
ipath
moduły:lub wersja asynchroniczna (
fs.readdir
zamiast tego używa ):Następnie wystarczy zadzwonić (dla wersji synchronizacji):
lub wersja asynchroniczna:
Różnica polega na tym, jak węzły blokują się podczas wykonywania operacji we / wy. Biorąc pod uwagę, że powyższy interfejs API jest taki sam, możesz po prostu użyć wersji asynchronicznej, aby zapewnić maksymalną wydajność.
Jest jednak jedna zaleta korzystania z wersji synchronicznej. Łatwiej jest wykonać jakiś kod zaraz po zakończeniu marszu, jak w następnej instrukcji po marszu. W wersji asynchronicznej potrzebujesz dodatkowego sposobu na sprawdzenie, kiedy skończysz. Być może najpierw utworzysz mapę wszystkich ścieżek, a następnie je wyliczysz. W przypadku prostych skryptów kompilacji / wykorzystania (w porównaniu z wysokowydajnymi serwerami WWW) można użyć wersji synchronizacji bez powodowania żadnych szkód.
źródło
walkSync
odwalk(filePath, callback);
dowalkSync(filePath, callback);
Począwszy od Node 10.10.0, można używać nowej
withFileTypes
opcji dlafs.readdir
ifs.readdirSync
w połączeniu zdirent.isDirectory()
funkcją do filtrowania nazw plików w katalogu. To wygląda tak:Zwrócona tablica ma postać:
Dokumenty dla klasy fs.Dirent
źródło
Korzystanie z obietnic w ES7
Wykorzystanie asynchroniczne z mz / fs
mz
Moduł zapewnia promisified wersje biblioteki węzła lokalnego. Korzystanie z nich jest proste. Najpierw zainstaluj bibliotekę ...Następnie...
Możesz też zapisać je w funkcjach asynchronicznych w ES7:
Zaktualizuj listę rekurencyjną
Niektórzy użytkownicy wyrazili chęć zobaczenia listy rekurencyjnej (choć nie w pytaniu) ... Użyj
fs-promise
. Wokół jest cienkie opakowaniemz
.następnie...
źródło
Zależności
Definicja.
Stosowanie.
Pamiętaj, że
fileList
jest to zbyt optymistyczne. W przypadku czegoś poważnego dodaj obsługę błędów.źródło
excludeDirs
również argument tablicowy. Zmienia to na tyle, że może powinieneś go edytować (jeśli chcesz). W przeciwnym razie dodam to w innej odpowiedzi. gist.github.com/AlecTaylor/f3f221b4fb86b4375650wersja nierekurencyjna
Nie mówisz, że chcesz to robić rekurencyjnie, więc zakładam, że potrzebujesz tylko bezpośrednich potomków katalogu.
Przykładowy kod:
źródło
Obciążenie
fs
:Czytaj pliki asynchronicznie :
Czytaj synchronizację plików :
źródło
jeśli ktoś nadal tego szuka, robię to:
i jego praca jest dla mnie bardzo dobra
źródło
[...files, ...getAllFiles(name)]
lub[...files, name]
. Trochę wyjaśnienia byłoby bardzo pomocne :)...
tutaj nazwa nazywa się składnią rozszerzoną. Zasadniczo zajmuje wszystkie obiekty wewnątrz tablicy i „przenosi” ją do nowej tablicy. W takim przypadku wszystkie wpisy wfiles
tablicy są dodawane do zwrotu wraz ze wszystkimi wartościami zwracanymi z wywołania rekurencyjnego. Możesz zapoznać się ze składnią rozprzestrzeniania tutaj: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Uzyskaj
sorted
nazwy plików. Można filtrować wyniki na podstawie konkretnychextension
, takich jak'.txt'
,'.jpg'
i tak dalej.źródło
Z twojego pytania zakładam, że nie chcesz nazw katalogów, tylko pliki.
Przykład:
Jeśli chcesz tylko tablicę ścieżek plików, użyj
return_object: false
:zwroty:
Kredyty trafiają na https://gist.github.com/lovasoa/8691344#gistcomment-2927279
źródło
Oto asynchroniczna wersja rekurencyjna.
źródło
Przyjęła ogólne podejście @ Hunan-Rostomyan, uczyniła go nieco bardziej zwięzłym i dodała
excludeDirs
argument. Rozszerzanie byłoby trywialneincludeDirs
, wystarczy postępować według tego samego wzoru:Przykładowe użycie:
źródło
Po wyjęciu z pudełka
Jeśli chcesz mieć obiekt ze strukturą katalogów od razu po wyjęciu z pudełka, gorąco polecam sprawdzenie drzewa katalogów .
Powiedzmy, że masz tę strukturę:
Wróci:
Obiekt niestandardowy
W przeciwnym razie, jeśli chcesz utworzyć obiekt drzewa katalogów z własnymi ustawieniami niestandardowymi, zapoznaj się z poniższym fragmentem. Przykład na żywo jest widoczny na tym kodzie i skrzynce .
Następnie możesz po prostu zrobić:
źródło
Jest to TypeScript, opcjonalnie rekurencyjny, opcjonalnie rejestrowanie błędów i rozwiązanie asynchroniczne. Możesz określić wyrażenie regularne dla nazw plików, które chcesz znaleźć.
Użyłem
fs-extra
, ponieważ jest to łatwa, super-poprawka nafs
.źródło
To zadziała i zapisze wynik w pliku test.txt, który będzie obecny w tym samym katalogu
źródło
Niedawno zbudowałem do tego narzędzie, które właśnie to robi ... Pobiera katalog asynchronicznie i zwraca listę elementów. Możesz pobrać katalogi, pliki lub oba, z pierwszymi folderami. Możesz także paginować dane w przypadku, gdy nie chcesz pobierać całego folderu.
https://www.npmjs.com/package/fs-browser
To jest link, mam nadzieję, że komuś pomoże!
źródło
Tylko jedna głowa: jeśli planujesz wykonywać operacje na każdym pliku w katalogu, wypróbuj winyl-fs (używany przez gulp , system kompilacji strumieniowej).
źródło
Zrobiłem moduł węzła, aby zautomatyzować to zadanie: mddir
Stosowanie
węzeł mddir „../relative/path/”
Aby zainstalować: npm install mddir -g
Aby wygenerować przecenę dla bieżącego katalogu: mddir
Aby wygenerować dla dowolnej ścieżki bezwzględnej: mddir / absolut / ścieżka
Aby wygenerować dla ścieżki względnej: mddir ~ / Documents /okolwiek.
Plik md zostanie wygenerowany w katalogu roboczym.
Obecnie ignoruje moduły node_modules i .git.
Rozwiązywanie problemów
Jeśli pojawi się błąd „node \ r: Brak takiego pliku lub katalogu”, problem polega na tym, że twój system operacyjny używa różnych zakończeń linii i mddir nie może ich przetworzyć bez wyraźnego ustawienia stylu zakończenia linii na Unix. Zwykle dotyczy to systemu Windows, ale także niektórych wersji systemu Linux. Ustawienie zakończenia linii na styl uniksowy należy wykonać w globalnym folderze bin mddir npm.
Naprawić zakończenia linii
Uzyskaj ścieżkę folderu bin npm za pomocą:
npm config get prefix
Cd do tego folderu
napar zainstaluj dos2unix
dos2unix lib / node_modules / mddir / src / mddir.js
Konwertuje to zakończenia linii na Unix zamiast Dos
Następnie uruchom normalnie z: node mddir „../relative/path/”.
Przykładowa wygenerowana struktura pliku Markdown „directoryList.md”
źródło
Użyj modułu
npm
zawartości listy . Odczytuje zawartość i podkatalogi danego katalogu i zwraca listę ścieżek plików i folderów.źródło
źródło