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

37

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

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

    
задан Ivan 30.11.2010 в 00:28
источник

10 ответов

36

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

sudo apt-get install tree

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

    
ответ дан kit.yang 30.11.2010 в 02:33
24
ls -alR

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

    
ответ дан Oli 30.11.2010 в 00:40
11
find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

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

Подробнее: Ссылка

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

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n" | column -t
    
ответ дан Oli 30.11.2010 в 00:57
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 (соответственно с учетом регистра и нечувствительность к регистру). Возьмите прочитанную man-страницу find - есть значительное количество опций, которые вы можете использовать для сужения / уточнения вашего поиска.

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

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

    
ответ дан Will 30.11.2010 в 06:05
3

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, чтобы перейти через выход с более удобной скоростью.

    
ответ дан 8128 30.11.2010 в 08:48
0

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

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

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

    
ответ дан Frank Z. 28.08.2013 в 07:23
0

Как насчет сценария 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?     

ответ дан Glutanimate 28.08.2013 в 08:01
0

Я создал специально для этого программу - Снимок каталога .
Он рекурсивно выполняет итерацию через каталог и сохраняет имена и размеры всех файлов и папок, с которыми он сталкивается в аккуратно структурированных HTML-файлах, которые имеют организацию, аналогичную структуре входного каталога. Другими словами, это можно рассматривать как гиперссылку dir /s или < href="https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/tree.mspx?mfr=true"> tree /f .     

ответ дан Anmol Singh Jaggi 06.03.2016 в 11:58
0

Nautilus

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

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

    
ответ дан wjandrea 29.12.2017 в 00:36
-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

Надежда, это помогает!

    
ответ дан Nitish Srivastava 21.07.2015 в 22:36