Chcę uruchomić ls
, aby uzyskać listę plików, a następnie odczytać wynik do tablicy, w której każdy element odpowiada nazwie pliku. czy to możliwe?Odczytywanie nazw plików do tablicy
Odpowiedz
Nie używaj ls
, to nie przeznaczone do tego celu. Użyj globowania.
shopt -s nullglob
array=(*)
array2=(file*)
array3=(dir/*)
Opcja nullglob
powoduje tablica jest pusta, jeśli nie są dopasowane.
Dzięki, czy w ogóle mogę podać wyniki? Próbowałem czegoś takiego jak arr (* | grep ".txt"), ale to się nie podoba. – dublintech
@dublintech: Nie potrzebujesz 'grep', po prostu dołącz ciąg znaków do swojego globu:' tablica = (*. Txt) 'lub' tablica = (* foo *) ' –
Dzięki Denis. To się udało. – dublintech
Po utworzy tablicę arr z wyjściem ls w bieżącym katalogu:
arr=($(ls))
Znacznie lepiej i bezpieczniej niż ls
można użyć echo *
:
arr=(*)
echo ${#arr[@]} # will echo number of elements in array
echo "${arr[@]}" # will dump all elements of the array
'ls' nie jest konieczne i nie powinno być używane do tego celu. –
Zgadzam się, chciałem tylko powiedzieć, jak utworzyć tablicę z niektórych wyników polecenia. Jednak zredagowałem swoją odpowiedź na stres, że należy unikać wyjścia 'ls'. – anubhava
Gdy rozszerzenie tablicy nie jest cytowane, wszystkie elementy tablicy są reprezentowane jako ciąg, a nie poszczególne elementy tablicy. Niecytowane '$ {arr [*]}' i '$ {arr [@]}' są takie same. – jordanm
W rzeczywistości ls
nie jest drogą do zrobienia. Spróbuj tego:
declare -a FILELIST
for f in *; do
#FILELIST[length_of_FILELIST + 1]=filename
FILELIST[${#FILELIST[@]}+1]=$(echo "$f");
done
Aby pobrać nazwy z tablicy:
echo ${FILELIST[x]
-lub-
echo ${FILELIST[@]:x:y}
gdzie x & y są pierwszy element, aby uzyskać i jak wiele elementów po że.
Na dobry tutorial tablic bash, zobacz: http://www.thegeekstuff.com/2010/06/bash-array-tutorial/
Powinieneś iterować po pliku glob * LUB * utwórz tablicę używając pliku glob jak w mojej odpowiedzi - nie * obu * !. Podczas dodawania elementów do tablicy nie ma powodu, aby używać długości tablicy w złożonym wyrażeniu indeksu (nie będzie działać zgodnie z oczekiwaniami, jeśli tablica jest rzadka, z jednej strony). 'tablica + = (element)'. Nie ma powodu, aby używać '$ (echo" $ f ")' po prostu wykonaj zadanie bezpośrednio.W jednym z poleceń 'echo' brakuje brakującego nawiasu klamrowego. –
Spróbuj tego,
PATH="" # could set to any absolute path
declare -a ARRAY=(${PATH}/*)
Jestem zakładając będziesz wyciągać niechciane rzeczy z listy później.
- 1. Odczytywanie pliku tekstowego do tablicy
- 2. Skuteczne odczytywanie dużych plików tekstowych
- 3. FileSystemObject - Odczytywanie plików Unicode
- 4. Odczytywanie/zapisywanie plików binarnych
- 5. Odczytywanie wielu plików z katalogu
- 6. Odczytywanie pliku do tablicy bajtowej (PHP)
- 7. Odczytywanie losowych wartości z tablicy
- 8. Sortowanie tablicy nazw plików zawierających ciągi o numerach
- 9. Odczytywanie tablicy bajtów C# w Javie
- 10. Java: Odczytywanie liczb całkowitych z pliku do tablicy
- 11. Porównywanie nazw plików Win32
- 12. Wywołanie JavaScript do sprawdzania poprawności nazw plików
- 13. Automatyczne odczytywanie plików zip w R
- 14. Odczytywanie i zapisywanie plików w QML (Qt)
- 15. Odczytywanie plików zasobów Java w aplikacji GoogleEngine
- 16. Efektywne odczytywanie konkretnych linii z dużych plików do R
- 17. Szybki sposób na odczytywanie/zapisywanie plików xlsx do/z R
- 18. Drukowanie nazw plików
- 19. Uzyskiwanie dostępu do nazw plików formularza przesyłania wielu plików
- 20. Zastępowanie znaków nazw plików pytonem
- 21. Zmiana nazw plików zawierających spacje
- 22. Konwencja nazw plików klas ogólnych
- 23. Java/Android: odczytywanie/zapisywanie tablicy bajtów przez gniazdo
- 24. MySQL gdzie NIE w tablicy nazw?
- 25. Odczytywanie (i zapisywanie) plików RTF z C++/Qt
- 26. Odczytywanie/zapisywanie plików xBase (DBASE 3-5/DBF)
- 27. Odczytywanie plików obrazów RAW jako map GDI + bitmapy
- 28. Odczytywanie plików CSV z pliku zip po linii w czasie
- 29. Czy ESLint stosuje reguły tylko do pewnych wzorców nazw plików?
- 30. Używanie Perla do zmiany nazw plików w katalogu
Tak, jest to możliwe. Może nie jest wskazane, jeśli nazwy mogą zawierać dowolne znaki (spacje i znaki nowej linii w nazwach powodują smutek), ale jest to wykonalne. Który z podręczników miałeś trudności ze zrozumieniem? –