Для моей задачи мне нужно перечислить все файлы в дереве (каталог, все его подкаталоги, все их подкаталоги и т. Д.).
Я бы предпочел видеть их в Nautilus или Krusader, но решение для командной строки также интересно (в этом случае мне потребуются полные имена файлов, размеры и время модификации для отображения).
tree будет очень удобно для вас.
sudo apt-get install tree
используя tree filepath
для перечисляет файлы.
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
Как ответил Оли, 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 Я только что узнал кое-что новое - - столбец
. Раньше я этим не пользовался.
ls -alR
Это, наверное, самый простой метод. Я просто взламываю скрипт поиска, чтобы дать вам больше контроля.
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 для более удобного прохождения через вывод с более комфортной скоростью.
Использование Krusader:
Это позволит вам обработать весь лот, перетащив его на другую панель и т. Д.
Как насчет сценария 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?
вы можете поместить их в свой .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
Надеюсь, это поможет !!
Это также работает в Nemo.
Я создал программу специально для этого - Снимок каталога .
Он рекурсивно выполняет итерацию по каталогу и сохраняет имена и размеры всех файлов и папок, с которыми он сталкивается, в аккуратно структурированных файлах HTML, которые имеют организацию, аналогичную структуре входного каталога.
Другими словами, это можно рассматривать как гиперссылочную версию команд dir / s
или tree / f
.