Подсчитать количество строк в каждом каталоге - PullRequest
0 голосов
/ 28 мая 2018

У меня есть структура каталогов, как показано ниже

output / a / 1 / multipleFiles
output / a / 2 / multicFiles
output / a / 3 / multipleFiles
output/ b / 1 / multipleFiles
output / b / 2 / multipleFiles
output / b / 3 / multipleFiles

Я хочу узнать количество строк в каждом каталоге.Таким образом, в основном, количество строк на каждом внутреннем уровне каталогов вместо уровня файлов.Самые внутренние каталоги 1, 2, 3 - это различные виды вывода, которые мы генерируем для нашей аналитики, которая содержит несколько файлов hadoop part-xxxx.

Я перешел в выходной каталог и попробовал следующую команду.

find . -maxdepth 2 -type d -name '*' | awk -F "/" 'NF==3' | awk '{print $0"/*"}' | xargs wc -l

Но я получаю сообщение об ошибке:

wc: ./a/1/*: No such file or directory
wc: ./a/2/*: No such file or directory
wc: ./a/3/*: No such file or directory

, но если я пытаюсь

wc -l ./a/1/*

Я получаю правильный вывод для этой конкретной папки.

Чего мне здесь не хватает.

РЕДАКТИРОВАТЬ:

Я обновил свою команду, как показано ниже, чтобы удалить ненужныекоманды awk.

 find . -mindepth 2 -maxdepth 2 -type d -name '*'  | xargs wc -l

Это снова приводит к ошибке как

wc: ./a/1: Is a directory 
wc: ./a/2: Is a directory 
wc: ./a/2: Is a directory

1 Ответ

0 голосов
/ 28 мая 2018

Попробуйте execdir, например:

find . -maxdepth 2 -type f -execdir wc -l {} \;

. Команда wc -l {} будет запущена только в каталоге, в котором был найден файл, от man:

 -execdir The -execdir primary is identical to the -exec primary with 
          the exception that utility will be executed from the 
          directory that holds the current file.
...