Я использую ls -a
команду, чтобы получить имена файлов в каталоге, но вывод в одной строке.
Как это:
. .. .bash_history .ssh updater_error_log.txt
Мне нужна встроенная альтернатива, чтобы получить имена файлов, каждое в новой строке, например:
.
..
.bash_history
.ssh
updater_error_log.txt
ls
на python, выls
получите по одному файлу на строку, как я объяснил в своем ответе.ls
выводитьpython
и наблюдать однострочный вывод в python?Ответы:
Используйте
-1
опцию (обратите внимание, что это «одна» цифра, а не строчная буква «L»), например:Однако сначала убедитесь, что вы
ls
поддерживаете-1
. GNU coreutils (устанавливается в стандартных системах Linux) и Solaris; но в случае сомнений используйтеman ls
илиls --help
или проверьте документацию. Например:источник
ls --help
выводе ... всегда устанавливается ;-)linux ls one file per line
и это была лучшая статья. Не могу поверить, насколько многословен выбранный ответ или что у этого ответа меньше голосов, чем у того, который доносит до кошки.ls -1
FTW.ls
по умолчанию-1
поведение, когда выход не подключен к терминалу.Да, вы можете легко сделать
ls
вывод одно имя файла в строке:Объяснение: Команда
ls
определяет, выводится ли вывод на терминал, в файл или канал и корректируется соответствующим образом.Так что, если вы переходите
ls -a
на Python, он должен работать без особых мер.источник
ls
только урезанная версия, поэтому не поддерживает-1
.
и..
«файлы» , показывая на выходе , хотя?Ls предназначен для потребления человеком, и вы не должны анализировать его вывод .
В сценариях оболочки есть несколько случаев, когда парсинг вывода ls действительно работает - это самый простой способ достижения желаемого эффекта. Так как ls может искажать не-ASCII и управляющие символы в именах файлов, эти случаи являются подмножеством тех, которые не требуют получения имени файла из
ls
.В python нет абсолютно никаких причин для вызова
ls
. Python имеет всеls
встроенные функции. Используетсяos.listdir
для просмотра содержимого каталога иos.stat
илиos
для получения метаданных файла. Другие функции вos
модулях также могут иметь отношение к вашей проблеме.Если вы обращаетесь к удаленным файлам через ssh, достаточно надежный способ перечисления имен файлов - через sftp:
Это печатает одно имя файла в строке и, в отличие от
ls
утилиты,sftp
не печатает непечатаемые символы. Вы по-прежнему не сможете надежно перечислить каталоги, в которых имя файла содержит новую строку, но это делается редко (помните, что это потенциальная проблема безопасности, а не проблема удобства использования).В python (знайте, что метасимволы оболочки должны быть экранированы
remote_dir
):Для более сложных взаимодействий посмотрите пакетный режим sftp в документации.
В некоторых системах (Linux, Mac OS X, возможно, в некоторых других приложениях, но определенно не в Windows) другой подход заключается в монтировании удаленной файловой системы через ssh с помощью sshfs , а затем в локальном режиме.
источник
ты можешь использовать
ls -1
ls -l
также сделаю работуисточник
ls -l
что не следует использовать.Легко, если ваши имена файлов не содержат символов новой строки:
Если вы передаете это в другую команду, вам, вероятно, следует предпочесть разделять имена файлов нулевыми байтами, а не символами новой строки, поскольку нулевые байты не могут встречаться в имени файла (но символы новой строки могут):
Печать этого на терминале, вероятно, будет отображаться в виде одной строки, потому что нулевые байты обычно не печатаются. Некоторым программам может потребоваться особая опция для обработки ввода с нулевым разделением, например
sort
, s-z
. Ваш собственный сценарий также должен был бы учитывать это.источник