Как я могу перечислить одно имя файла на вывод в Linux?

StackOverflow https://stackoverflow.com/questions/3886295

  •  28-09-2019
  •  | 
  •  

Вопрос

я использую ls -a Команда, чтобы получить имена файлов в каталоге, но вывод находится в одной строке.

Как это:

.  ..  .bash_history  .ssh  updater_error_log.txt

Мне нужна встроенная альтернатива для получения имена файлов, каждый на новой строке, как это:

.  
..  
.bash_history  
.ssh  
updater_error_log.txt
Это было полезно?

Решение

Использовать -1 Опция (Обратите внимание, что это «одна» цифра, а не строчная буква «L»), как это:

ls -1a

Во-первых, правда, убедитесь, что ваш ls поддерживает -1. Отказ GNU CORETILS (установленные на стандартных системах Linux) и Solaris DO; Но если сомневаться, используйте man ls или ls --help или проверьте документацию. Например:

$ man ls
...
       -1     list one file per line.  Avoid '\n' with -q or -b

Другие советы

Да, вы можете легко сделать ls Вывод одно имя файла в строку:

ls -a | cat

Объяснение: команда ls Ощущения, если вывод находится в клемме или к файлу или трубе и корректирует соответственно.

Итак, если вы труба ls -a Питону он должен работать без каких-либо специальных мер.

Ls предназначен для потребления человеком, а также Вы не должны разбирать свой вывод.

В сценариях Shell есть несколько случаев, когда анализ выхода LS работает, является самым простым способом достижения желаемого эффекта. Поскольку Ls может убить не-ASCII и контролировать символы в именах файлов, эти случаи являются подмножеством тех, которые не требуют получения имени файла от ls.

В Питоне нет абсолютно никаких причин вызывать ls. Отказ У питона есть все lsфункциональность встроена. Использовать os.listdir Чтобы перечислить содержимое каталога и os.stat или os Для получения файловых метаданных. Другие функции в os Модули, вероятно, будут иметь отношение к вашей проблеме.


Если вы получаете доступ к удаленным файлам по SSH, достаточно надежный способ перечисления имени файлов через SFTP:

echo ls -1 | sftp remote-site:dir

Это отпечатывает одно имя файла на строку, и в отличие от ls утилита, sftp не повредит непечатаемыми персонажами. Вы все равно не сможете надежно перечислите каталоги, где имя файла содержит новую строку, но это редко сделано (запомнить это как потенциальную проблему безопасности, а не проблему для использования в размере.

В Python (остерегайтесь, что метасимволы Shell должны быть выберены в remote_dir):

command_line = "echo ls -1 | sftp " + remote_site + ":" + remote_dir
remote_files = os.popen(command_line).read().split("\n")

Для более сложных взаимодействий посмотрите пакетный режим SFTP в документации.

В некоторых системах (Linux, Mac OS X, возможно, некоторые другие единицы, но определенно не Windows), другой подход - это установить удаленную файловую систему через SSH SSHFS., а затем работать на месте.

ты можешь использовать ls -1

ls -l также сделает работу

Легко, если ваши имена файлов не включают в себя Newlines:

find . -maxdepth 1

Если вы подключите это в другую команду, вы, вероятно, предпочтете отделить свои имена файлов NULL BYTES, а не в Newlines, поскольку NULL BYTES не может произойти в именем файле (но новинки могут):

find . -maxdepth 1 -print0

Печать, что на терминале, вероятно, будет отображаться как одна строка, потому что нулевые байты обычно не напечатаны. Некоторые программы могут понадобиться конкретный вариант для обработки NULL-разделите вход, например, sortС. -z. Отказ Ваш собственный скрипт аналогично придется объяснить это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top