Korzystam z ls -a
polecenia, aby uzyskać nazwy plików w katalogu, ale dane wyjściowe są w jednym wierszu.
Lubię to:
. .. .bash_history .ssh updater_error_log.txt
Potrzebuję wbudowanej alternatywy, aby uzyskać nazwy plików, każdy w nowej linii, jak poniżej:
.
..
.bash_history
.ssh
updater_error_log.txt
ls
do Pythona,ls
wyświetli jeden plik w wierszu, jak wyjaśniono w mojej odpowiedzi.ls
wyjściepython
i obserwowałeś wyjście w jednym wierszu w pythonie?Odpowiedzi:
Użyj
-1
opcji (zwróć uwagę, że jest to „jedna” cyfra, a nie mała litera „L”), jak poniżej:Najpierw jednak upewnij się, że masz
ls
wsparcie-1
. Coreutils GNU (zainstalowane na standardowych systemach Linux) i Solaris; ale w razie wątpliwości, należy użyćman ls
lubls --help
czy sprawdzić dokumentację. Na przykład:źródło
ls --help
wyjściu ... zawsze zainstalowane ;-)linux ls one file per line
i to był najlepszy artykuł. Nie mogę uwierzyć, jak trudna jest wybrana odpowiedź lub że ta odpowiedź ma mniej głosów niż ta, która dała się złapać kotowi.ls -1
ftw.ls
domyślnie-1
zachowuje się, gdy wyjście nie jest podłączone do terminala.Tak, możesz łatwo zrobić
ls
jedną nazwę pliku w wierszu:Objaśnienie: Polecenie
ls
wykrywa, czy dane wyjściowe są wysyłane do terminala, pliku lub potoku i odpowiednio dostosowuje.Tak więc, jeśli potokujesz
ls -a
do Pythona, powinien on działać bez specjalnych środków.źródło
ls
jest tylko część uproszczonej wersji, więc nie obsługuje-1
.
i..
„pliki” jest widoczny na wyjściu chociaż?Ls jest przeznaczony do spożycia przez ludzi i nie powinieneś analizować jego wydajności .
W skryptach powłoki istnieje kilka przypadków, w których parsowanie danych wyjściowych ls działa, jest najprostszym sposobem na osiągnięcie pożądanego efektu. Ponieważ ls może modyfikować znaki inne niż ASCII i znaki sterujące w nazwach plików, te przypadki są podzbiorem tych, które nie wymagają uzyskania nazwy pliku
ls
.W Pythonie nie ma absolutnie żadnego powodu, aby się wywoływać
ls
. Python ma wszystkiels
wbudowane funkcje. Służyos.listdir
do wyświetlania zawartości katalogu ios.stat
lubos
do uzyskiwania metadanych plików. Inne funkcje wos
modułach mogą być również związane z twoim problemem.Jeśli uzyskujesz dostęp do zdalnych plików przez ssh, dość dobrym sposobem wyświetlania nazw plików jest sftp:
Spowoduje to wydrukowanie jednej nazwy pliku w wierszu i, w odróżnieniu od
ls
narzędzia,sftp
nie zmienia znaków niedrukowalnych. Nadal nie będziesz w stanie rzetelnie wymienić katalogów, w których nazwa pliku zawiera nowy wiersz, ale jest to rzadko wykonywane (pamiętaj o tym jako o potencjalnym problemie bezpieczeństwa, a nie o użyteczności).W pythonie (uwaga, że metaznaki powłoki muszą być znakami ucieczki
remote_dir
):W przypadku bardziej złożonych interakcji sprawdź tryb wsadowy sftp w dokumentacji.
W niektórych systemach (Linux, Mac OS X, być może w innych unikach, ale na pewno nie w Windows), innym podejściem jest zamontowanie zdalnego systemu plików za pomocą ssh z sshfs , a następnie praca lokalna.
źródło
możesz użyć
ls -1
ls -l
wykona również pracęźródło
ls -l
nie należy używać.Łatwe, o ile nazwy plików nie zawierają nowych linii:
Jeśli przesyłasz to do innego polecenia, prawdopodobnie powinieneś raczej rozdzielić nazwy plików według bajtów pustych niż znaków nowej linii, ponieważ bajty zerowe nie mogą wystąpić w nazwie pliku (ale znaki nowej linii mogą):
Drukowanie na terminalu będzie prawdopodobnie wyświetlane jako jedna linia, ponieważ puste bajty zwykle nie są drukowane. Niektóre programy mogą potrzebować konkretnej opcji do obsługi danych rozdzielanych znakami zerowymi, takich jak
sort
's-z
. Podobnie twój skrypt musiałby to uwzględnić.źródło