подсчитайте количество файлов на основе имени файла в каталоге hdfs

#bash #shell #apache-spark-sql #hdfs

#bash #оболочка #apache-spark-sql #hdfs

Вопрос:

У меня есть каталог HDFS с более чем тысячью записей, который содержит разные имена файлов. Я должен подсчитывать файлы на основе имени файла. Поскольку у меня есть тысячи файлов, я не могу указать конкретное имя файла для подсчета.

Например, каталог содержит следующие файлы

/a/b/a.txt

/a/b/b.txt

/a/b/c.txt

/a/b/a.txt

/a/b/b.txt

/a/b/c.txt

Результат должен быть

a.txt 2

b.txt 2

c.txt 2

Комментарии:

1. Я не думаю, что одинаковые имена файлов возможны в папке.

2. Вы хотели сказать a/a/a.txt , a/b/a.txt , …?

Ответ №1:

Это ни в коем случае не эффективное решение, но если вы просто хотите быстро что-то написать, оно подойдет:

 find . -exec basename {} ; | sort | uniq -c | sort
  

Объяснение:

  • найдите все файлы в текущем каталоге и выведите их базовое имя (просто имя файла, удалите родительские каталоги). Чтобы изменить корень поиска, укажите путь, а не .
  • отсортируйте список в алфавитном порядке (это необходимо для выполнения следующего шага)
  • подсчитывать каждый элемент (флаг-c uniq подсчитывает каждое вхождение)
  • отсортируйте этот список для просмотра в порядке возрастания.

В моей системе это дает что-то вроде

   ... removed some output for clarity ...
  2 CMakeLists.txt
  2 heads
  2 hello
  2 info
  2 origin
  2 refs
  2 remotes
  2 test
  2 test.cpp
  4 .gitignore
  4 HEAD
  4 master
  5 Makefile
  

Комментарии:

1. я делал что-то неправильно … исправил это … спасибо за помощь.