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

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

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

43
задан 30 November 2010 в 02:28

10 ответов

tree будет очень удобно для вас.

sudo apt-get install tree

используя tree filepathдля перечисляет файлы.

39
ответ дан 30 November 2010 в 02:28
find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

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

Больше: http://linux.about.com/od/commands/l/blcmdl1_find.htm

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

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n" | column -t
12
ответ дан 30 November 2010 в 02:28

Как ответил Оли, 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

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

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

@Oli : +1 Я только что узнал кое-что новое - - столбец. Раньше я этим не пользовался.

4
ответ дан 30 November 2010 в 02:28
ls -alR

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

27
ответ дан 30 November 2010 в 02:28

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

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

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

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

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

ls -lR

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

ls -lR | less

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

4
ответ дан 30 November 2010 в 02:28

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

  1. Использовать поиск (Ctl-S).
  2. Отметьте «поиск в подкаталогах».
  3. Нажмите «Поиск» .
  4. По завершении поиска нажмите «Подача в список».

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

0
ответ дан 30 November 2010 в 02:28

Как насчет сценария Nautilus ?

#!/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
ответ дан 30 November 2010 в 02:28

вы можете поместить их в свой .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
ответ дан 30 November 2010 в 02:28

Nautilus

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

Это также работает в Nemo.

0
ответ дан 30 November 2010 в 02:28

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

0
ответ дан 30 November 2010 в 02:28

Другие вопросы по тегам:

Похожие вопросы: