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



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



такой:. .. .bash_history .ssh updator_error_log.txt



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



.  
..
.bash_history
.ssh
updator_error_log.txt
565   6  

6 ответов:

использовать man ls чтобы увидеть, если ваш ls поддерживает -1 опция (что" одна "цифра, а не строчная буква" L " - спасибо @slashmais), например

http://docs.oracle.com/cd/E19082-01/819-2239/6n4hsf6oc/index.html

...

-1

   Prints one entry per line of output.

GNU / Linux ls поддерживает его, поэтому используйте:

ls -1a

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

ls -a | cat

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

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

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

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


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

echo ls -1 | sftp remote-site:dir

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

в python (остерегайтесь, что метасимволы оболочки должны быть экранированы в 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, возможно, некоторые другие unices, но определенно не Windows) другой подход заключается в монтировании удаленной файловой системы через ssh с sshfs, а затем работать локально.

можно использовать ls -1

ls -l не работает

легко, пока ваши имена файлов не включают новые строки:

find . -maxdepth 1

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

find . -maxdepth 1 -print0

печать, которая на терминале, вероятно, будет отображаться как одна строка, потому что нулевые байты обычно не печатаются. Некоторые программы могут нуждаться в определенной опции для обработки нулевых разделителей ввод, например sort ' s -z. Ваш собственный скрипт также должен будет учитывать это.

просто ради разнообразия:

ls | tr ' ' '\n'

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

Comments

    Ничего не найдено.