в 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 с помощью оболочки сценария,
How Я могу это сделать?
Предполагая, что никакое другое поле на выходе не содержит /, и никакая директория или имя файла не содержит новую строку, вы можете сделать:
hdfs dfs -ls | grep '^d' | cut -d/ -f3
Команда grep выбирает строки, начинающиеся с d, маркирующие каталоги cut commend затем выбирают третье поле, разделенное символом / (первым является информация до пути к файлу, вторая - имя каталога data) Альтернатива Awk:
hdfs dfs -ls | awk -F/ '/^d/{print $3}'
Предполагая, что никакое другое поле на выходе не содержит /, и никакая директория или имя файла не содержит новую строку, вы можете сделать:
hdfs dfs -ls | grep '^d' | cut -d/ -f3
Команда grep выбирает строки, начинающиеся с d, маркирующие каталоги cut commend затем выбирают третье поле, разделенное символом / (первым является информация до пути к файлу, вторая - имя каталога data) Альтернатива Awk:
hdfs dfs -ls | awk -F/ '/^d/{print $3}'