web-dev-qa-db-ja.com

HDFSのファイル名のみをリストする方法

Hadoopでファイル名のみを取得するコマンド/式があることを知りたいです。ファイル名を取得する必要があるのは、hadoop fs -lsパス全体を出力します。

私は以下を試しましたが、それを行うためのより良い方法があれば疑問に思います。

hadoop fs -ls <HDFS_DIR>|cut -d ' ' -f17 
27
Navneet Kumar

hadoop lsはファイル名だけを出力するオプションをサポートしていません 、または最後の列だけをサポートしているようです。

最後の列を確実に取得したい場合は、最初に空白を単一のスペースに変換して、最後の列をアドレス指定できるようにする必要があります。

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

これにより、最後の列だけでなく、パス全体のファイルが取得されます。ファイル名だけが必要な場合は、@ rojomokeが示唆するようにbasenameを使用できます。

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

_Found ?x items_という最初の行も除外しました

:コメントの@ felix-frankのメモのように、上記のコマンドは複数の連続したスペースを持つファイル名を正しく保存しないことに注意してください。したがって、Felixが提案するより正確なソリューション:

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

30
Jakub Kotowski

次のコマンドは、ファイル名のみを返します。

hdfs dfs -stat "%n" my/path/*
28
MichealKum

これが誰かの助けになることを願っています-バージョン2.8.x +(3でも利用可能)-

hadoop fs -ls  -C  /paths/
18
anirudh.vyas
 hadoop fs -ls  -C  /path/* | xargs -n 1 basename
1
Achyuth

私がよく使用するもう1つのソリューション。関連するものはほとんどありません。

  • Found x itemsなしでのみファイルとディレクトリをリストします

hdfs dfs -ls -d mypath/*

  • でのみフルパスを維持

hdfs dfs -ls -d mypath/* | awk '{print $8}'

  • ファイル名のみ

hdfs dfs -ls -d mypath/* | awk '{print $8}'| while read fn; do basename $fn; done

  • 必要に応じてパステンプレートを追加で使用します。

hdfs dfs -ls -d {my,his}path/*.{txt,doc}

0
MichealKum

Basenameコマンドを使用します。このコマンドは、文字列から「/」で終わるプレフィックスを取り除きます。

basename $(hadoop fs -ls)
0
rojomoke

Belowコマンドは、ディレクトリ内のファイル名のみを返します。 Awkリストを「/」で分割し、ファイル名になる最後のフィールドを出力します。

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

0
Vinod ram