Подтвердить что ты не робот

Как перечислять только имена файлов в HDFS

Я хотел бы знать, есть ли какая-либо команда/выражение, чтобы получить только имя файла в hadoop. Мне нужно получить только имя файла, когда я делаю hadoop fs -ls, он печатает весь путь.

Я попробовал ниже, но просто задаюсь вопросом, есть ли лучший способ сделать это.

hadoop fs -ls <HDFS_DIR>|cut -d ' ' -f17 
4b9b3361

Ответ 1

Кажется, hasoop ls не поддерживает никаких параметров для вывода только имен файлов или даже только последнего столбца.

Если вы хотите надежно получить последний столбец, сначала нужно преобразовать пробел в одно пространство, чтобы затем вы могли обратиться к последнему столбцу:

hadoop fs -ls | sed '1d;s/  */ /g' | cut -d\  -f8

Это даст вам только последний столбец, но файлы со всем путем. Если вы хотите просто имена файлов, вы можете использовать basename, как предлагает @rojomoke:

hadoop fs -ls | sed '1d;s/  */ /g' | cut -d\  -f8 | xargs -n 1 basename

Я также отфильтровал первую строку, в которой говорится Found ?x items

Примечание. Остерегайтесь того, что в комментариях @felix-frank отмечает, что приведенная выше команда не будет корректно сохранять имена файлов с несколькими последовательными пробелами. Следовательно, более корректное решение, предложенное Феликс:

hadoop fs -ls /tmp | sed 1d | perl -wlne'print +(split " ",$_,8)[7]'

Ответ 2

Следующая команда возвращает только имена файлов:

hadoop fs -stat "%n" my/path/*

Ответ 3

Я надеюсь, что это поможет кому-то - с версией 2.8.x + (доступно также в 3) -

hadoop fs -ls  -C  /paths/

Ответ 4

Команда ниже возвращает только имена файлов в Каталоге. Awk Разбивает список на '/' и печатает последнее поле, которое будет именем файла.

hdfs dfs -ls /<folder> | awk -F'/' '{print $NF}'

Ответ 5

Используйте команду basename, которая удаляет любой префикс, заканчивающийся в '/' из строки.

basename $(hadoop fs -ls)