Як перелічити всі файли у дереві (каталог та його підкаталоги)?


41

Для моєї задачі мені потрібно перерахувати всі файли у дереві (каталог, усі його підкаталоги, усі підкаталоги цих тощо).

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


Це питання має надзвичайно багато поглядів. Можливо, ви могли б прийняти відповідь, яку ви вважаєте найбільш корисною, щоб заощадити інших на деякий час @Ivan?
starbeamrainbowlabs

Відповіді:


39

дерево буде для вас дуже зручним.

sudo apt-get install tree

за допомогою tree filepathсписку файлів.


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сторінкою «man man» - є значна кількість варіантів, які ви можете використати для звуження / уточнення пошуку.

І так само, якщо ви очікуєте, що у вас буде повернуто кілька скріншотів даних, не забудьте передати свої результати 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. Коли пошук закінчено, натисніть «Подати в список списку».

Це дозволить обробити всю партію, перетягнувши на іншу панель тощо.


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?


0

Я створив програму спеціально для цього - Знімок каталогу .
Він рекурсивно повторюється через каталог і зберігає імена та розміри всіх файлів і папок, з якими він стикається, у чітко структурованих HTML-файлах, які мають організацію, подібну до вхідної директорії.
Іншими словами, це можна розглядати як гіперпосилання версії команд dir /sабо tree /f.


Ви писали dirі treeз параметрами стилю DOS, тож я мушу запитати, чи буде це працювати на Ubuntu?
wjandrea

Так, я насправді запланував її запуск на моїй установці Ubuntu кожного вихідного. Хоча він побудований за допомогою C ++ та Boost, тому скласти та створити двійковий файл буде складно. Ось чому я зараз переношу його на Python. У будь-якому випадку я можу надати вам попередньо складений двійковий файл, якщо хочете.
Анмол Сінгх Джаггі

0

Наутілус

  1. Увімкніть розширення підпапок у вікні списку
    • Про 14.04 та 16.04 дивіться тут
    • Про 17.10 та 18.04 дивіться тут
  2. Клацніть папку та натисніть зірочку ( *на numpad чи 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.