Как перечислить все файлы в каталоге с абсолютными путями

Добро пожаловать на форумы. Я получил системные требования с официальных сайтов. Windows 10 требуется как минимум 16 ГБ для 32-разрядной ОС и 20 ГБ для 64-разрядной версии. Kali Linux (2.0) требуется не менее 10 ГБ (может быть, и для 64-битной, и для 32-битной?). #fixme

31
09.03.2016, 01:12
5 ответов

Другой способ с деревом , не упомянутым здесь, работает рекурсивно и, в отличие от find или ls, у вас нет ошибок (например: Permission denied , Not a каталог ) вы также получите абсолютный путь на тот случай, если вы хотите передать файлы в xargs или другую команду

tree -fai /pathYouWantToList >listOfFiles.list

, значения параметров:

-a     All  files  are  printed.  By default tree does not print hidden files (those beginning with a dot
       `.').  In no event does tree print the file system constructs `.'  (current  directory)  and  `..'
       (previous directory).

-i     Makes tree not print the indentation lines, useful when used in conjunction with the -f option.

-f     Prints the full path prefix for each file.

Для установки tree :

sudo apt install tree на Ubuntu / Debian

sudo yum install tree на CentOS / Fedora

sudo zypper install tree на OpenSUSE

4
27.01.2020, 19:37

Вы можете просто использовать realpath или readlink :

ls | xargs realpath
  • xargs создавать и выполнять командные строки из стандартного ввода.
  • realpath : вернуть канонизированный абсолютный путь
  • readlink : прочитать значение символической ссылки
3
27.01.2020, 19:37

Рекурсивные файлы могут быть перечислены многими способами в linus.Здесь я делюсь одним скриптом лайнера, чтобы очистить все журналы файлов (только файлы )из каталога /var/log/, а второй недавно проверил, какой файл журналов сделал запись.

Первый:-

find /var/log/ -type f  #listing file recursively 

Второй:-

for i in $(find $PWD -type f) ; do cat /dev/null > "$i" ; done #empty files recursively 

Третье использование:-

ls -ltr $(find /var/log/ -type f ) # listing file used in recent

примечание :для расположения каталога вы также можете передать $PWD вместо /var/log.

1
08.08.2020, 18:44

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

eval ls -d $(echo $PATH | sed -e 's|^:|.:|'  -e 's|:$|:.:|'  -e 's|:|/{.,}[[:word:]]* |g') 2>/dev/null | sort

ПРИМЕЧАНИЕ
Переменная PATHобычно имеет двоеточие(:)либо в начале, либо в конце, но не в обоих сразу. Двоеточие в начале или в конце означает поиск в текущем каталоге. Стандартная практика заключается в том, чтобы он находился в конце, чтобы никогда не переопределять стандартные служебные программы. Подстановки sedздесь подходят для любого случая.

Пояснение...

  • eval
    Честно говоря, я не знаю, зачем здесь нужен eval, но он есть. Без него я получаю...

ls: cannot access './{.,}[[:word:]]': No such file or directory
ls: cannot access '/home/alpha/bin/{.,}[[:word:]]
': No such file or directory
ls: cannot access '/usr/local/sbin/{.,}[[:word:]]': No such file or directory
ls: cannot access '/usr/local/bin/{.,}[[:word:]]
': No such file or directory
ls: cannot access '/usr/sbin/{.,}[[:word:]]': No such file or directory
ls: cannot access '/usr/bin/{.,}[[:word:]]
': No such file or directory
ls: cannot access '/sbin/{.,}[[:word:]]': No such file or directory
ls: cannot access '/bin/{.,}[[:word:]]
': No such file ordirectory

  • ls -d
    Список каталогов. Опция -dна самом деле не просто перечисляет каталоги. Добавляя /*к каждому каталогу (см. ниже ), мы получим содержимое каталогов.
  • $(... )Выполните команды в скобках и замените $(... )результатами для ls.
    • $(echo :$PATH | sed -e 's|^:|.:|' -e 's|:$|:.:|' -e 's|:|/{.,}[[:word:]]* |g')
      • Создает разделенный пробелом -список шаблонов каталогов, таких как...
        ./{.,}[[:word:]]* /home/alpha/bin/{.,}[[:word:]]* /usr/local/sbin/{.,}[[:word:]]* /usr/local/bin/{.,}[[:word:]]* /usr/sbin/{.,}[[:word:]]* /usr/bin/{.,}[[:word:]]* /sbin/{.,}[[:word:]]* /bin/{.,}[[:word:]]*
        
      • echo $PATH
        Переменная среды PATH содержит разделенный двоеточием -список всех каталогов, в которых будут выполняться поиски команд.
      • sed
        Утилита для редактирования потоков. Следующие -eварианты замены обрабатываются последовательно, так что результаты каждого из них доступны для следующего. Таким образом, :.:, вставленный вторым, позволяет заменить двоеточие шаблоном в третьем.
      • -e 's|^:|.:|'
        Если PATHначинается с двоеточия (:), замените его на .:
      • .
      • -e 's|:$|:.:|'
        Если PATHзаканчивается двоеточием (:), замените его на:.:
      • -e 's|:|/{.,}[[:word:]]* |g
        Замените каждое двоеточие(:)на /{.,}[[:word:]]*. Этот шаблон включает файлы, начинающиеся с точки (.), за которой следует любое количество буквенно-цифровых символов или символов подчеркивания. Дополнительная запятая(,{.,}является причудой bash 5.0.18, поскольку она ожидает список или диапазон, разделенный запятыми.Здесь мы используем замену фигурных скобок, чтобы сделать точку(.)необязательной.
      • 2>/dev/null
        Сбросить сообщения об ошибках.
  • | sort
    При необходимости отсортируйте выходные данные предыдущей команды.
0
19.12.2020, 10:31

Я считаю, что bash find $(pwd)работает хорошо. Также работает ls | xargs realpath. Вы можете добавить любые другие флаги к последнему примеру, а также к первому.

0
27.04.2021, 22:05

Теги

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