Как вывести список всех файлов в дереве (каталог и его подкаталоги)?


41

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

Я бы предпочел видеть их в Nautilus или Krusader, но решение для командной строки также интересно (в этом случае мне понадобятся полные имена файлов, размеры и время модификации для перечисления).


У этого вопроса очень много мнений. Возможно, вы могли бы принять ответ, который вы нашли наиболее полезным, чтобы сэкономить время другим @Ivan?
starbeamrainbowlabs

Ответы:



27
ls -alR

Это, наверное, самый простой способ. Я просто взломал скрипт поиска, чтобы дать вам больше контроля.


7
Или просто, ls -Rесли вы не хотите, чтобы все детали.
Мэтью

11
find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

Вы можете играть с форматированием printf сколько угодно. Это дает вам прекрасную возможность отформатировать вещи так, как вам нужно, что неоценимо, если вы используете вывод в другом приложении.

Подробнее: http://linux.about.com/od/commands/l/blcmdl1_find.htm

Для лучшей читаемости вы можете передать все это через columnкоманду, и она автоматически изменит размеры, чтобы они выстроились в линию.

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n" | column -t

4

Как ответил Оли, findпозволит вам искать по всему дереву каталогов:

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

# Where %TY will display the mod. time year as 4 digits
#       %Tm will display the mod. time month as 2 digits
#       %Td will display the mod. time day as 2 digits
#       %s displays the file size in bytes
#       %p displays the full path name of the file

Вы также можете использовать -type fопцию, чтобы ограничить результаты только файлами. Если вы хотите сопоставить шаблон файла, вам нужны опции -nameили -iname(с учетом регистра и без учета регистра, соответственно). Прочитайте findсправочную страницу пользователя - есть много вариантов, которые вы можете использовать, чтобы сузить / уточнить ваш поиск.

И, кроме того, если вы ожидаете, что вам будет возвращено несколько скринингов данных, не забудьте направить свои результаты less.

@Oli: +1 Я тоже узнал что-то новое - column. Не использовал это раньше.


3

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

Однако -Rфлаг является рекурсивной опцией (обратите внимание на заглавную R , а не на r ), которая также покажет вам все подкаталоги.

Вы также запросили «детали» - для этого вам нужен -lфлаг (это строчная буква L, а не номер один). Помните, что это дает вам информацию о правах доступа к файлам, а также размер файла, информацию о времени / дате и имя файла.

Если вы хотите также показать скрытые файлы / папки (эквивалент Ctrl+ Hв Nautilus), добавьте -aфлаг «все».

Вы можете объединить флаги, чтобы получить что-то вроде:

ls -lR

Если вы запустите это в любой папке приличного размера, вы обнаружите, что это приводит к огромному длинному выводу, который очень быстро прокручивается по экрану. Чтобы обойти это, вы можете «передать» вывод lsчерез программу, которая называется less(имя - пародия на подобное, moreкоторое было первым, но имеет больше возможностей).

ls -lR | less

Это позволит вам использовать клавиши со стрелками вверх / вниз, наряду с PageUp / Down, чтобы проходить через выход с более удобной скоростью.


0

Использование Krusader:

  1. Используйте Поиск (Ctl-S).
  2. Отметьте галочкой "поиск по подкаталогам".
  3. Нажмите «Поиск».
  4. Когда поиск будет завершен, нажмите «Feed to listbox».

Это позволит вам обрабатывать весь лот, перетаскивая его на другую панель и т. Д.


0

Как насчет сценария Наутилуса ?

#!/bin/bash
#
# AUTHOR:       (c) 2013 Glutanimate (https://askubuntu.com/users/81372)
# NAME:         DirTree 0.1
# DEPENDENCIES: zenity tree  (install with sudo apt-get install zenity tree)
# LICENSE:      GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
#
# DESCRIPTION:  Creates a directory tree at the current location. If you want you
#               can filter the output by a pattern (e.g. *.avi to only include avi
#               files).

TITLE=DirTree

# Get working directory
WORKINGDIR="`python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' $NAUTILUS_SCRIPT_CURRENT_URI`"

# Time and date
TIME=$(date +"%Y-%m-%d_%H%M%S")

# Filter pattern
zenity --question --title "$TITLE" --text "Do you want to filter by a specific file pattern?"

if [ "$?" = "1" ]
  then
      customtree="tree"
  else
      PATTERN=$(zenity --entry --title "$TITLE" --text="Please enter a file pattern (e.g. *.avi)")

         if [ -z "$PATTERN" ]
           then
               exit
           else
               customtree="tree -P $PATTERN"               
         fi

fi

# Directory tree
$customtree "$WORKINGDIR" > "$WORKINGDIR/directorytree_$TIME.txt"

Инструкция по установке: Как я могу установить скрипт Nautilus?


0

Специально для этого я создал программу - Снимок каталогов .
Он рекурсивно перебирает каталог и сохраняет имена и размеры всех файлов и папок, с которыми он сталкивается, в аккуратно структурированных файлах HTML, которые имеют организацию, аналогичную организации входного каталога.
Другими словами, это можно рассматривать как гиперссылочную версию команд dir /sor tree /f.


Вы написали dirи treeс опциями в стиле DOS, поэтому я должен спросить, будет ли это работать на Ubuntu?
wjandrea

Да, на самом деле я запланировал, что он будет запускаться на моей установке Ubuntu каждые выходные. Хотя он построен с использованием C ++ и Boost, поэтому будет немного сложно скомпилировать и создать двоичный файл. Вот почему я нахожусь в процессе портирования его на Python. В любом случае, я могу дать вам скомпилированный двоичный файл, если хотите.
Анмол Сингх Джагги

0

кораблик

  1. Включить раскрывающиеся подпапки в виде списка
  2. Нажмите на папку и нажмите звездочку ( *на цифровой клавиатуре или Shift+ 8), чтобы развернуть один уровень подкаталогов. Каждый раз, когда вы нажимаете звездочку, она будет расширяться до следующего уровня.

Это также работает в Немо.


-1

Вы можете поместить их в свой файл .bashrc

function _get_tree(){ ls -alR | while read LINE; do   echo $LINE | grep ":$" > /dev/null;   if [ $? -eq 0 ];   then     VAR=$(echo $LINE | grep ":$"| sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/' | tee /dev/tty);   fi;   echo $LINE | grep "^-" > /dev/null;   if [ $? -eq 0 ];   then     size=${#VAR};     for i in $(eval echo "{1..$size}"); do echo -n ' '; done;     echo -n '..';     echo $LINE | cut -d ' ' -f9;   fi; done; };

alias get_tree='_get_tree'

Теперь вы можете использовать команду get_tree внутри любого каталога, и она отобразит всю иерархию.

Синтаксис:

$ get_tree

Пример вывода:

   .

    ..test.sh

   |-2

      ..123.log

   |---3

   |-----4

   |-5

   |---6

Надеюсь это поможет !!


Не поможет, если вы не объясните, что вы делаете ..
Рон

-1 Плохое форматирование кода, недостаточно объяснений. А почему вы делаете псевдоним?
wjandrea
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.