Как я могу перечислить одно имя файла на выходную строку в Linux?
Я использую ls -a команда для получения имен файлов в Каталоге, но вывод в одной строке.
такой:. .. .bash_history .ssh updator_error_log.txt
есть ли встроенная Альтернатива для получения имен файлов, каждый на новой строке, например:
.
..
.bash_history
.ssh
updator_error_log.txt
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, а затем работать локально.
легко, пока ваши имена файлов не включают новые строки:
find . -maxdepth 1если вы передаете это в другую команду, вы, вероятно, предпочтете разделить свои имена файлов на нулевые байты, а не на новые строки, поскольку нулевые байты не могут встречаться в имени файла (но новые строки могут):
find . -maxdepth 1 -print0печать, которая на терминале, вероятно, будет отображаться как одна строка, потому что нулевые байты обычно не печатаются. Некоторые программы могут нуждаться в определенной опции для обработки нулевых разделителей ввод, например
sort' s-z. Ваш собственный скрипт также должен будет учитывать это.
просто ради разнообразия:
ls | tr ' ' '\n'команда tr переводит все пробелы в новые строки. Поскольку ls без каких-либо аргументов дает только имена файлов, разделенные пробелом, вывод отображается как одно имя файла в строке.
Comments