Быстрый способ рекурсивно считать файлы в Linux

Общедоступная/частная пара ключей должна быть создана на машине, которую Вы хотите подключить с того времени, открытый ключ должен быть скопирован в машину, с которой Вы хотите соединиться. Поскольку этот explaination позволяет, называют машину, которую Вы хотите подключить от локального и машины, которую Вы хотите подключить к удаленному.

Шаг 1 - Генерирует пару ключей на локальном

> ssh-keygen -t dsa

Эта команда создаст id_dsa и id_dsa.pub в Вашей домашней папке, т.е. ~/.ssh/id_dsa и ~/.ssh/id_dsa.pub

Шаг 2 - Добавляет открытый ключ к authorized_keys файлу на машине, с которой Вы хотите соединиться.

  1. скопируйте содержание ~/.ssh/id_dsa.pub на локальном для Вашего буфера обмена
  2. откройте ssh сессию для удаленного

локальный> ssh user@remote

  1. откройте authorized_keys файл для редактирования, создав, если это не существует

удаленный> vi ~/.ssh/authorized_keys

  1. Если файл пуст, нажмите, я затем вставляю Ваше содержание буфера обмена в файл. Если файл имеет использование записей клавиши со стрелками для навигации к нижней части, то нажмите i и вставьте содержание буфера обмена.
  2. сохраните файл путем ввода: wq
  3. измените полномочия на authorized_keys файле

    удаленный> chmod 600 ~/.ssh/authorized_keys

Необходимо теперь смочь соединиться с удаленной машиной с помощью ключа.

local> ssh user@remote
3
задан 23 November 2010 в 11:57
7 ответов

Если у Вас есть это в специализированной файловой системе, или у Вас есть устойчивое количество файлов наверху, Вы можете получать достаточно грубое количество количества файлов путем рассмотрения количества inodes в файловой системе через "df-i":

root@dhcp18:~# df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            60489728   75885 60413843    1% /

На моем тестовом поле выше у меня есть 75,885 выделенные inodes. Однако эти inodes не являются просто файлами, они - также каталоги. Например:

root@dhcp18:~# mkdir /tmp/foo
root@dhcp18:~# df -i /tmp 
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            60489728   75886 60413842    1% /
root@dhcp18:~# touch /tmp/bar
root@dhcp18:~# df -i /tmp
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            60489728   75887 60413841    1% /

Примечание: Не все файловые системы поддерживают количества inode тот же путь. ext2/3/4 будет все работать, однако btrfs всегда сообщает 0.

Если необходимо дифференцировать файлы от каталогов, Вы оказываетесь перед необходимостью обходить файловую систему и "статистику" каждый, чтобы видеть, является ли это файл, каталог, символьная ссылка, и т.д... Самой большой проблемой здесь не является передача по каналу всего текста в "туалет", но поиск вокруг среди всего inodes и записей каталога для соединения тех данных.

Кроме inode таблицы как показано "df-i", действительно нет никакой базы данных того, сколько файлов там находится под данным каталогом. Однако, если эта информация важна для Вас, Вы могли бы создать и поддержать такую базу данных при наличии Вашего инкремента программ число, когда они создают файл в этом каталоге и постепенно уменьшают его при удалении. Если Вы не управляете программами, которые создают их, это не опция.

8
ответ дан 3 December 2019 в 04:45

Попробуйте этот удобный небольшой сценарий Python, чтобы видеть если его немного быстрее.

from os import walk
print sum([len(files) for (root, dirs, files) in walk('/some/path')])

Andrew

0
ответ дан 3 December 2019 в 04:45
  • 1
    Ой, по некоторым причинам я думал, что директора обновили для отражения этого. –  Andrew M. 23 November 2010 в 20:44

Я бы также попробовал:

find topDir -maxdepth 3 -printf '% h% f \ n'

И затем обработать вывод, сократив количество каталогов.

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

1
ответ дан 3 December 2019 в 04:45

если вы установили locate, вы можете использовать

locate -r '.' | grep -c "^$PWD"

или получить результат по всей файловой системе

locate -S

Это будет намного быстрее, чем найти, если у вас много файлов.

единственный недостаток в том, что он также считает директории

1
ответ дан 3 December 2019 в 04:45

Я написал специальную программу подсчета файлов для этого вопроса StackOverflow: https://stackoverflow.com/questions/1427032/fast-linux -file-count-for-a-large-number-of-files

Вы можете найти репозиторий GitHub здесь, если хотите просмотреть, загрузить или внести свой вклад: https://github.com/ ChristopherSchultz / fast-file-count

1
ответ дан 3 December 2019 в 04:45

Si voleu comptar recursivament el nombre de fitxers d'un directori, l'ordre find és el que he conegut de forma ràpida, suposant que teniu un base de dades de dates (base de dades d’actualització sudo .. feta per defecte mitjançant el treball cron cada dia). No obstant això, podeu accelerar l'ordre si eviteu la canonada grep .

Vegeu man seek :

-c, --count
       Instead  of  writing  file  names on standard output, write the number of 
       matching entries only.

Per tant, l'ordre més ràpid és:

locate -c -r '/path/to/dir'
1
ответ дан 3 December 2019 в 04:45

Распараллелить. Запустите отдельную команду find для каждого подкаталога и запустите их одновременно. Это можно автоматизировать с помощью xargs .

1
ответ дан 3 December 2019 в 04:45

Теги

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