на hdfs, выводе ls
команда похожа на это:
drwxrwxr-x 5 matteorr matteorr 4096 Jan 10 17:37 /data/Cluster
drwxr-xr-x 2 matteorr matteorr 4096 Jan 19 10:43 /data/Desktop
drwxrwxr-x 9 matteorr matteorr 4096 Jan 20 10:01 /data/Developer
drwxr-xr-x 11 matteorr matteorr 4096 Dec 20 13:55 /data/Documents
drwxr-xr-x 2 matteorr matteorr 12288 Jan 20 13:44 /data/Downloads
drwx------ 11 matteorr matteorr 4096 Jan 20 14:01 /data/Dropbox
drwxr-xr-x 2 matteorr matteorr 4096 Oct 18 18:43 /data/Music
drwxr-xr-x 2 matteorr matteorr 4096 Jan 19 22:12 /data/Pictures
drwxr-xr-x 2 matteorr matteorr 4096 Oct 18 18:43 /data/Public
drwxr-xr-x 2 matteorr matteorr 4096 Oct 18 18:43 /data/Templates
drwxr-xr-x 2 matteorr matteorr 4096 Oct 18 18:43 /data/Videos
Я получил бы все имя подкаталогов в /data
оболочкой сценария,
Как я могу сделать это?
Принятие никакого другого поля в выводе включает a /
, и никакой каталог или имя файла не содержат новую строку, Вы могли сделать:
hdfs dfs -ls | grep '^d' | cut -d/ -f3
grep
команда выбирает строки, которые начинаются d
, маркировка каталоговcut
рекомендуйте затем выбирает третье поле, разделенное /
(первое, являющееся информацией до пути к файлу, второе имя каталога data
)Альтернатива Awk:
hdfs dfs -ls | awk -F/ '/^d/{print $3}'