Список дерева каталогов в Python

Как мне получить список всех файлов (и каталогов) в данном каталоге в Python?


Это способ просмотреть каждый файл и каталог в дерево каталогов:

  import os for dirname, dirnames, filenames in os.walk ('.'): # сначала вывести путь ко всем подкаталогам.  for subdirname в dirnames: print (os.path.join (dirname, subdirname)) # распечатать путь ко всем именам файлов.  для имени файла в именах файлов: print (os.path.join (dirname, filename)) # Расширенное использование: # редактирование списка 'dirnames' остановит повторное использование os.walk () туда.  если '.git' в dirnames: # не заходите ни в какие каталоги .git.  dirnames.remove ('. git')  

538

Вы можете использовать

  os.listdir (path)  

Для справки и других функций ОС смотрите здесь :

  • Документы Python 2: https://docs.python.org/2/library/os.html#os.listdir
  • Python 3 документа: https://docs.python.org/3/library/os.html#os.listdir
Улучшите этот ответ
отредактировано 5 февраля ’17 в 0:11
Matt
23.9k55 золотых знаков7171 серебряных знаков6969 бронзовых знаков
ответил 23 сен ’08 в 12:32
  • 1
    мы Все исходные вопросы достаточно расплывчаты, чтобы не знать, хотят ли они рекурсивного решения. «все файлы в каталоге» можно интерпретировать как рекурсивный. – Томми 10 дек. ’15 в 2:01
  • 3
    @Tommy, «каталог» – это четко определенная структура данных, и она ссылается на «ls», а не на «ls -R». Кроме того, почти все инструменты UNIX по умолчанию не работают рекурсивно. Я не знаю, что спрашивающий имел в виду , но то, что он написал , было ясно. – Торстен Бронгер 06 июля ’16 в 13:19
  • Однако документы python 3 советуют вам использовать os.scandir , поскольку во многих случаях он позволяет предотвращать системные вызовы, обеспечивая бесплатное ускорение (как IPC, так и IO медленные). – Джеппи Керк, 14 апр. ’17 в 9:54
  • 7
    listdir дает вам единственное имя файла в каталоге, есть ли способ получить полный путь? – greperror 03 авг. 2017, 21:04
  • 1
    @greperror Вы можете использовать os.path.abspath для получения полного пути. Кроме того, чтобы проверить, является ли данный путь файлом, используйте os.path. isfile или os.path.isdir . – Александр 01 апр. ’18 в 22:10
добавить комментарий |

Вы можете использовать

  os.listdir (path)  

Для справки и других функций ОС смотрите здесь:

  • Документы Python 2: https://docs.python.org/2/library/os .html # os.listdir
  • Документы Python 3: https://docs.python.org/3/library/os.html#os.listdir

118

Вот вспомогательная функция, которую я использую довольно часто:

  import osdef listdir_fullpath (d): return [os.path.join (d, f) for f in os.listdir (d)]  

Улучшить этот ответ
ответил 23 сен ’08 в 13: 23
  • 3
    Генератор был бы лучше. – Роберт Симер, 11 сен. ’15 в 9:27
  • 2
    @RobertSiemer, который зависит от использования. Во многих случаях список был бы лучше, но я думаю, что генератор более универсален, поскольку его можно преобразовать в список. Это зависит от того, что вам нужно: универсальность или что-то более рациональное. – Джеймс Мчуг, 09 авг., 20:02
  • 4
    Прошло десять лет, но я думаю, что сделал это таким образом, потому что os.listdir () возвращает список, и я имитировал это. – giltay 14 авг. ’18 в 13:53
добавить комментарий |

Вот вспомогательная функция, которую я использую довольно часто:

  import osdef listdir_fullpath (d  ): return [os.path.join (d, f) for f в os.listdir (d)]  

82

  импортировать osfor filename в os.listdir ("C: \ temp"): напечатать имя файла  

Улучшите этот ответ
отредактировал июль 03 ’12 в 17:28
Tim Cooper
141k3535 золотых знаков291291 серебряных знаков251251 бронзовых знаков
ответ дан 23 сен ’08 в 15: 34
  • 17
    r'C: temp ' является более понятным и предпочтительным в "C: \ temp" Необработанные строки предпочтительнее, чем экранирование обратной косой черты. – smci 26 августа 2012 г., 2:07
добавить комментарий |

  import  osfor имя файла в os.listdir ("C: \ temp"): напечатать имя файла  

15

Если вам нужны возможности подстановки, для этого также есть модуль. Например:

  import globglob.glob  ('./[0-9 visible.*')  

вернет что-то вроде:

  ['./1  .gif ',' ./2.txt ']  

См. документацию здесь.

Улучшить этот ответ
iv>
ответил 24 сен ’12 в 20:58
  • Это действительно здорово! у вас может быть отрицание в этом совпадающем выражении? нравится все, кроме файлов, соответствующих шаблону ЭТО ? – Чарли Паркер 20 июля ’20 в 16:02
добавить комментарий |

Если вам нужны возможности подстановки, для этого также есть модуль. Например:

  import globglob.glob ('./[0-9]. *')  

вернет что-то например:

  ['./1.gif', './2.txt']  

См. документацию здесь .


10

Попробуйте следующее:

  импортировать osfor top, dirs, files в os.walk ('./'): для nm в файлах: print os.path.join (top, nm)  

Улучшите этот ответ
ответил сентябрь 23 ’08, в 12:34
  • В одной строке: [top + os.sep + f для top, dirs, files в os.walk (‘./’) для f в файлах ] – Дж. Петерсон, 23 апр. ’13 в 21:10

    i>

добавить комментарий |


Попробуйте это:

  импортируйте osfor top, dirs, files в os.walk  ('./'): для nm в файлах: print os.path. join (top, nm)  

10

Для файлов в текущем рабочем каталоге без указания пути

Python 2.7:

  import osos  .listdir ('.')  

Python 3.x:

  import osos  .listdir ()  

Улучшите этот ответ
отредактировал 24 ноября ’20 в 19:49
Георгий
5 , 29855 золотых знаков4040 серебряных знаков5050 бронзовых знаков
ответил 27 июля ’16 в 12: 472016-07-27 12:47
добавить комментарий |

Для файлов в текущем рабочем каталоге без указания пути

Python 2.7:

  import osos.listdir ('.')  

Python 3.x:

  import osos.listdir ()  

5

Рекурсивная реализация

  import osdef scan_dir (dir): for name in os.listdir  (dir): path = os.path.join (dir, name) if os.path.isfile (path): print path else: scan_dir (path)  

Улучшите этот ответ
ответил 27 мая 2015, в 1:45
добавить комментарий |

Рекурсивная реализация

  import osdef scan_dir (dir): для имени в ОС  .listdir (dir): path = os.path.join (dir, name) if os.path.isfile (path): print path else: scan_dir (path)  

4

Я написал длинную версию со всеми параметрами, которые могут мне понадобиться: http://sam.nipl.net/code/python/find.py

Думаю, здесь он тоже подойдет:

  #!/usr/ bin/env pythonimport osimport sysdef ls (dir, hidden = False, relative = True): nodes = [] для nm в os.listdir (dir): если не скрыт и nm.startswith ('.'): продолжить, если не относительный  : nm = os.path.join (dir, nm) nodes.append (nm) nodes.sort () return nodesdef find (root, files = True, dirs = False, hidden = False, relative = True, topdown = True)  : root = os.path.join (root, '') # добавить косую черту, если ее нет для parent, ldirs, lfiles в os. walk (root, topdown = topdown): if relative: parent = parent [len (root):] if dirs и parent: yield os.path.join (parent, ''), если не скрыт: lfiles = [nm для nm в  lfiles, если не nm.startswith ('.')] ldirs [:] = [nm для nm в ldirs, если не nm.startswith ('.')] # на месте, если files: lfiles.sort () для nm в lfiles:  nm = os.path.join (parent, nm) yield nmdef test (root): print "* список каталогов, со скрытыми файлами:" print ls (root, hidden = True) print print "* рекурсивный листинг, с каталогами, но  нет скрытых файлов: "для f в find (root, dirs = True): print f printif __name__ ==" __main__ ": test (* sys.argv [1:])  

Улучшить этот ответ
отредактировал 8 августа 2012 в 3:25
01 авг. в 06:47
добавить комментарий |

Я написал длинную версию со всеми параметрами, которые могут мне понадобиться: http://sam.nipl.net/code/python/ find.py

Думаю, он подойдет и здесь:

  #!/usr/bin/env pythonimport osimport sysdef ls (dir, hidden  = False, relative = True): nodes = [] для nm в os.listdir (dir): if not hidden and nm.startswith ('.'): Continue, if not relative: nm = os.path.join (dir,  nm) nodes.append (nm) nodes.sort () return nodesdef find (root, files = True, dirs = False, hidden = False, relative = True, topdown = True): root = os.path.join (root,  '') # добавить косую черту, если ее нет для parent, ldirs, lfiles в os.walk (root, topdown = topdown): if relative: parent = parent [len (root):] if dirs и parent: yield os.path.  join (parent, ''), если не скрыт: lfiles = [nm для nm в lfiles, если не nm.startswith ('.')] ldirs [:] = [nm для nm в ldirs, если не nm.startswith ('.'.  )] # на месте, если files: lfiles.sort () для nm в lfiles: nm = os.path.join (parent, nm) yield nmdef test (root): print "* список каталогов, с  скрытые файлы: "print ls (root, hidden = True) print print" * рекурсивный список, с каталогами, но без скрытых файлов: "для f в find (root, dirs = True): print f printif __name__ ==" __main__ "  : test (* sys.argv [1:])  

4

Вот еще один вариант.

  os.scandir (path = '.')  

Он возвращает итератор объектов os.DirEntry, соответствующих записям (вместе с информацией об атрибутах файла) в каталоге, заданном путем.

Пример :

  с os.scandir (path) как он: для записи в нем: если  не entry.name.startswith ('.'): print (entry. name)  

Использование scandir () вместо listdir () может значительно повысить производительность кода, которому также требуется информация о типе файла или атрибутах файла , потому что объекты os.DirEntry предоставляют эту информацию, если операционная система предоставляет ее при сканировании каталога. Все методы os.DirEntry могут выполнять системный вызов, но is_dir () и is_file () обычно требуют системного вызова только для символьных ссылок; os.DirEntry.stat () всегда требует системного вызова в Unix, но требует только одного для символьных ссылок в Windows.

Python Docs

Улучшить этот ответ
отредактировал 5 сен 2018 в 8:31
ответил 5 сентября ’18 в 8:13
добавить комментарий |

Вот еще один вариант.

  os.scandir (path = '.'.  )  

Он возвращает итератор объектов os.DirEntry, соответствующих записям (вместе с информацией об атрибутах файла) в каталоге, заданном путем.

Пример :

  с os.scandir (путь) как он: для записи в нем: если  not entry.name.startswith ('.'): print (entry.name)  

Использование scandir () вместо listdir () может значительно повысить производительность кода, которому также нужна информация о типе файла или атрибутах файла , потому что объекты os.DirEntry предоставляют эту информацию, если операционная система предоставляет ее при сканировании каталога. Все методы os.DirEntry могут выполнять системный вызов, но is_dir () и is_file () обычно требуют системного вызова только для символьных ссылок; os.DirEntry.stat () всегда требует системного вызова в Unix, но требует только одного для символьных ссылок в Windows.

Python Docs


3

Хотя os.listdir () подходит для создания списка имена файлов и каталогов, часто вы хотите сделать больше, когда у вас есть эти имена – а в Python3 pathlib упрощает эти другие рутинные операции. Давайте посмотрим, нравится ли вам это так же, как и мне.

Чтобы вывести список содержимого каталога, создайте объект Path и возьмите итератор:

  In [16]: Path ('/etc'). iterdir () Out [16]:   

Если мы хотим просто список имен вещей:

  In [17]: [x.name for x in Path ('/etc'). iterdir ()] Out [17]:  ['emond.d', 'ntp-restrict.conf', 'периодический',  

Если вам нужны только каталоги:

  В [18]: [x.name для x в пути ('/etc'). iterdir () if x.is_dir ()] Out [18]: ['emond. d ',' period ',' mach_init.d ',  

Если вам нужны имена всех файлов conf в этом дереве:

  В [20]: [x.name для x в пути ('/etc'). glob ('**/*. conf')] Out [20]: ['ntp-restrict.conf', '  dnsextd.conf ',' syslog.conf ',  

Если вам нужен список файлов conf в дереве> = 1K:

  In [23]: [x.name for x in Path ('/etc'). glob ('**/*. conf') if x.stat (). st_size> 1024] Out [23]:  ['dnsextd.conf', 'pf.conf', 'autofs.conf',  

Разрешение относительных путей стало проще:

  In [32]: Path ('../Operational Metrics.md'). resolve () Out [32]: PosixPath ('/Users/starver/code/xxxx/Operational Metrics.md')   

Навигация по пути довольно ясна (хотя и неожиданна):

  В [10]: p = Path ('.') В [  11]: core = p/'web'/'core'In [13]: [x для x в core.iterdir (), если x.is_file ()] Out [13]: [PosixPath (' web/core/metrics  .py '), PosixPath (' web/core/services.py '), PosixPath (' web/core/querysets.py '),  

Улучшить этот ответ
ответил 06 дек. ’18 в 2:08
добавить комментарий |

Хотя os.listdir () подходит для генерации списка имен файлов и каталогов, часто вы хотите делать больше, когда у вас есть эти имена – а в Python3 pathlib упрощает эти другие дела. Давайте посмотрим, нравится ли вам это так же, как и мне.

Чтобы вывести список содержимого каталога, создайте объект Path и возьмите итератор:

  In [16]: Path ('/etc'). iterdir () Out [16]:   

Если мы хотим просто список имен вещей:

  In [17]: [x.name for x in Path ('/etc'). iterdir ()] Out [17]:  ['emond.d', 'ntp-restrict.conf', 'периодический',  

Если вам нужны только каталоги:

  В [18]: [x.name для x в пути ('/etc'). iterdir () if x.is_dir ()] Out [18]: ['emond.d', 'периодический', '  mach_init.d ',  

Если вам нужны имена всех файлов conf в этом дереве:

  В [20]:  [x.name для x в пути ('/etc'). glob ('**/*. conf')] Out [20]: ['ntp-restrict.conf', 'dnsextd.conf', 'syslog.  conf ',  

Если вам нужен список файлов conf в дереве> = 1 КБ:

  В [23]:  [x.name для x в Path ('/etc'). glob ('**/*. conf'), если x.stat (). st_size> 1024] Out [23]: ['dnsextd.conf', '  пф.  conf ',' autofs. conf ',  

Разрешение относительных путей стало проще:

  В [32]: Path (' ../Operational Metrics.  md '). resolve () Out [32]: PosixPath ('/Users/starver/code/xxxx/Operational Metrics.md ')  

Навигация с помощью пути довольно понятна (хотя и неожиданно):

  В [10]: p = Path ('.') В [11]: core = p/'web'/'core'In [  13]: [x вместо x в core.iterdir (), если x.is_file ()] Out [13]: [PosixPath ('web/core/metrics.py'), PosixPath ('web/core/services.py'  ), PosixPath ('web/core/querysets.py'),  

1

Хороший лайнер для рекурсивного перечисления только файлов. Я использовал это в своей директиве setup.py package_data:

  import os [os.path.join (x [0], y) для x в os.walk (' ') для y в x [2]]  

Я знаю, что это не ответ на вопрос, но может пригодиться

Улучшить этот ответ
ответил 30 декабря 2014 г. в 22:35
добавить комментарий |

Хороший лайнер для рекурсивного перечисления только файлов. Я использовал это в своей директиве setup.py package_data:

  import os [os.path.join (x [0], y) для x в os.walk (' ') для y в x [2]]  

Я знаю, что это не ответ на вопрос, но может пригодиться


1
  #!/bin/python2import osdef scan_dir (путь):  распечатать карту (os.path.abspath, os.listdir (pwd))  

Для фильтра и карты вам нужно обернуть их списком ()

  #!/bin/python3import osdef scan_dir (путь): print (list (map (os.path.abspath, os.listdir (pwd))))  

Теперь рекомендуется заменить использование map и filter выражениями генераторов или списками:

  #!/bin/pythonimport osdef scan_dir (path): print (  [os.path.abspath (f) для f в os.listdir (path)])  

Улучшение прочтите этот ответ
ответил 14 авг. в 13: 11.
добавить комментарий |

  #!/bin/python2import osdef scan_dir (path): распечатать карту (os.path.abspath, os. listdir (pwd))  

Для фильтра и карты вам нужно обернуть их списком ()

  #!/bin/ python3import osdef scan_dir (path): print (list (map (os.path.abspath, os.listdir (pwd))))  

Теперь рекомендуется заменить свое использование карты и фильтра с выражениями генераторов или списками:

  #!/bin/pythonimport osdef scan_dir (path): print ([os.path.abspath (f) for f  в os.listdir (путь)])  

1

Тот, который работал со мной, является своего рода модифицированной версией ответа Салеха в другом месте на этой странице.

Код выглядит следующим образом:

  dir = 'given_directory_name'filenames = [os.path.abspath (os.path.join (dir, i)) для i в os.listdir (dir)]  

Улучшите этот ответ
отредактировано 24 ноября ’20 в 8:22
tripleee
133k2323 золотых знака193193 серебряных знака256256 бронзовых знаков
ответил 18 марта ’18 в 16:29
добавить комментарий |

Тот, который работал со мной, является своего рода модифицированной версией ответа Салеха в другом месте на этой странице.

Код выглядит следующим образом:

  dir = 'given_directory_name'filenames = [os.path.abspath (os.path.join (dir, i)) for i in os.  listdir (dir)]  

0

  #import modulesimport os_CURRENT_DIR = '.'def rec_tree_traverse (curr_dir, indent): "рекурсивная функция для обхода каталога" #print "[traverse_tree]" try: dfList = [os.path.join (curr_dir  , f_or_d) для f_or_d в os.listdir (curr_dir)] за исключением: print "неправильное имя пути/имя каталога" возврат для file_or_dir в dfList: если os.path.isdir (file_or_dir): #print "dir:", print indent,  file_or_dir, "\" rec_tree_traverse (file_or_dir, indent * 2) if os.path.isfile (file_or_dir): #print "file:", print indent, file_or_dir #end if for loop # конец traverse_tree ()  def main (): base_dir = _CURRENT_DIR rec_tree_traverse (base_dir, "") raw_input ("введите любой ключ для выхода ....") # конец main () if __name__ == '__main__': main ()   

Улучшите этот ответ
отредактировано 23 ноя ’12, в 11:56
Майк Пеннингтон
37. 1k1616 золотых знаков123123 серебряных знака166166 бронзовых знаков
ответ дан 23 ноя ’12 в 14: 38
  • 5
    На этот вопрос уже есть совершенно хороший ответ, нет нужно ответить еще раз – Майк Пеннингтон, 23 ноя., 2012, 11:57
добавить комментарий |

  #import modulesimport os_CURRENT_DIR = '.'def rec_tree_traverse (curr_dir, indent): "рекурсивная функция для обхода каталога  "#print" [traverse_tree] "try: dfList = [os.path.join (curr_dir, f_or_d) для f_or_d в os.listdir (curr_dir)] за исключением: print« неправильный путь/имя каталога »возврат для file_or_dir в dfList:  if os.path.isdir (file_or_dir): #print "dir:", print indent, file_or_dir, "\" rec_tree_traverse (file_or_dir, indent * 2) if os.path.isfile (file_or_dir): #print "file:"  , print indent, file_or_dir #end if for loop # конец traverse_tree () def main (): base_dir = _CURRENT_DIR rec_tree_traverse (base_dir, "") raw_input ("введите любой ключ для выхода ....") # конец main (  ) if __name__ == '__main__': main ()  

0

FYI Добавьте фильтр расширения или импорта файлов ext.

  path = '.' для dirname, dirn  ames, имена файлов в os.walk (path): # распечатать путь ко всем именам файлов с расширением py.  для имени файла в именах файлов: fname_path = os.path.join (dirname, filename) fext = os.path.splitext (fname_path) [1] if fext == '.py': напечатать fname_path else: continue  

Улучшите этот ответ
отредактировано 19 августа ’14, 18:26
ответил 19 августа 2014 в 18:17
добавить комментарий |

FYI Добавьте фильтр расширения или импорта файлов ext.

  path = '  . 'для dirname, dirnames, filenames в os.walk (path): # выводить путь ко всем именам файлов с расширением py.  для имени файла в именах файлов: fname_path = os.path.join (dirname, filename) fext = os.path.splitext (fname_path) [1] if fext == '.py': напечатать fname_path else: continue  

0

Если бы подумал, я бы добавил это. Простой и грязный способ поиска подстановочных знаков.

  import reimport os [a for a in os.listdir (".") If re.search ("^. * . py $ ", a)]  

Улучшите этот ответ
ответил 25 февраля ’16 в 13:31
добавить комментарий |

Если бы подумал, я бы добавил это. Просто и грязный способ поиска с подстановочными знаками.

  import reimport os [a for a in os.listdir (".") if re.search ("^. * . py $  ", a)]  

0

В приведенном ниже коде будут перечислены каталоги и файлы внутри dir

  def print_directory_contents (sPath): import os для sChild в os.listdir (sPath): sChildPath = os.path  .join (sPath, sChild), если os.path.isdir (sChildPath): print_directory_c  ontents (sChildPath) else: print (sChildPath)  

Улучшите этот ответ
ответил 21 июля ’17 в 17:15
добавить комментарий |

В приведенном ниже коде будут перечислены каталоги и файлы в каталоге

  def print_directory_contents (  sPath): импортировать ОС для sChild в os.listdir (sPath): sChildPath = os.path.join (sPath, sChild) если os.path.isdir (sChildPath): print_directory_contents (sChildPath) else: print (sChildPath)  

0

Вот однострочный Pythonic версия:

  import osdir = 'given_directory_name'filenames = [os.path.join (os.path.dirname (os.path.abspath (__ file __)), dir, i  ) для i в os.listdir (dir)]  

Этот код перечисляет полный путь ко всем файлам и каталогам в указанном имени каталога.

Улучшите этот ответ
отредактировано 21 июля ’17 в 16:31
ответил 21 июля ’17 в 15:59
  • Спасибо, Салех, но ваш код не работал полностью, а тот, который работал, был изменен следующим образом: ‘dir =’ given_directory_name ‘filenames = [os.path.abspath (os.path .join (dir, i)) для i в os. listdir (dir)] ‘- HassanSh__3571619 18 марта ’18 в 16:24
комментировать |

Вот однострочная версия Pythonic:

  import osdir = 'given_directory_name'  filenames = [os.path.join (os.path.dirname (os.path.abspath (__ file __)), dir, i) for i в os.listdir (dir)]  

Этот код перечисляет полный путь ко всем файлам и каталогам в указанном имени каталога.


0

Я знаю, что это старый вопрос . Это изящный способ, с которым я столкнулся, если вы используете liunx-машину.

  import subprocessprint (subprocess.check_output (["ls", "/" ]).decode("utf8"))  

Улучшите этот ответ
ответил 9 ноября ’17 в 21: 04
  • 2
    Это чрезвычайно неэффективен, а также подвержен ошибкам. Python прекрасно знает, как перемещаться по списку каталогов, и вам в любом случае не следует использовать ls в скриптах. – tripleee 24 нояб. ’20 в 8:23
добавить комментарий |

Я знаю, что это старый вопрос. Это изящный способ, с которым я столкнулся, если вы используете liunx-машину.

  import subprocessprint (subprocess.check_output (["ls", "/" ]).decode("utf8"))  


Как использовать дерево, чтобы показать путь к именам файлов, содержащим определенную строку?

У меня довольно большая файловая система, и скажем, что Я хочу найти все файлы и каталоги в определенной области моей файловой системы, которые содержат String ActionListeener , и для этого я хочу использовать дерево . Итак, если я это сделаю:

  tree ~/|  grep ActionListeener  

Результатом будет:

  │ │ │ └── ActionListeener.class│ │ └── ActionListeener.  java  

Итак, теперь я знаю, что эти файлы действительно существуют где-то немного глубже в моей файловой системе, но я понятия не имею, какая папка содержит подпапку, которая содержит подпапку -sub-folder и так далее, в файлы.

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


Информация об ОС:

  Описание: Ubuntu 15.04Release  : 15.04  

Информация о пакете:

  tree: Установлено: 1.7.0-3 Кандидат: 1.7.0-3 Таблица версий  : *** 1.7.0-3 0500 http://gb.archive.ubuntu. com/ubuntu/vivid/universe amd64 Пакеты 100/var/lib/dpkg/status  

Использовать шаблон tree соответствие ( -P ) в сочетании с - prune :

  $ tree.├──  archlinux-simpleblack│ ├── angle-down.png│ ├── archlinux.png # snip ├── reboot.png ├── shutdown.png └── theme.conf8 каталогов, 78 файлов $ tree -P 'reboot *  '--prune .├── maui│ └── reboot.png└── maui-dark └── reboot.png2 каталогов, 2 файла  

Из man tree :

  -P шаблон Список только тех файлов, которые соответствуют шаблону подстановочного знака.  Примечание: вы должны использовать параметр -a, чтобы также рассматривать файлы, начинающиеся с точки `. '  для сопоставления.  Допустимые операторы с подстановочными знаками: `* '(любые ноль или более символов),`?'  (любой одиночный символ), `[...] '(любой одиночный символ, указанный в скобках (необязательно - (тире) для диапазона символов может использоваться: например: [AZ]), и` [^ ...]' (  любой отдельный символ, не указанный в скобках) и `| 'разделяет альтернативные шаблоны. --prune Заставляет дерево удалять пустые каталоги из вывода, полезно при использовании вместе с -P или -I. См. ОШИБКИ И ПРИМЕЧАНИЯ ниже для получения дополнительной информации об этом  вариант.  

2

Используйте параметр дерева -f . Из man tree :

-f Выводит префикс полного пути для каждого файла.

Итак, ваша команда будет:

  tree -f ~/| grep 'ActionListeener'  

Обратите внимание, что это будет соответствовать ActionListeener в любом месте строки, поэтому будьте точны при выборе каталога, в котором вы это запустите.

Улучшите этот ответ
ответил 23 мая 2015 г. в 16:26
добавить комментарий |

Используйте параметр дерева -f . Из man tree :

-f Печатает префикс полного пути для каждого файла.

Итак, ваша команда будет выглядеть так:

  tree -f ~/|  grep 'ActionListeener'  

Обратите внимание, что это будет соответствовать ActionListeener в любом месте строки, поэтому будьте точны при выборе каталога, в котором вы будете запускать это.


0

Попробуйте дерево -P '' --prune

В вашем случае: tree -P 'ActionListeener' ~ --prune

Улучшите этот ответ
ответил 27 февраля ’20 в 14:30
добавить комментарий |

Попробуйте tree -P '' --prune

В вашем случае: tree -P 'ActionListeener' ~ --prune

Оцените статью
futurei.ru
Добавить комментарий