如何分离文件和目录,以便对文件执行某些操作/进程?

u0njafvf  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(355)

从给定的目录中,我使用以下命令列出所有文件和目录。

`hadoop dfs -lsr <path to hdfs directory>`

此列表列出文件和目录

drwxrwxrwx   - root xyz          0 2014-10-09 18:39 <path to directory>
-rw-rw-rw-   3 root xyz  133998512 2015-04-08 03:36 <path to file>

我想有一个脚本,采取这些输出和过滤文件路径只。我相信只要看每一行的第一个字符就足够了drwxrwx和-rw rw rw rw-但是我不知道如何为它编写脚本。也许我需要学awk。

rekjcdws

rekjcdws1#

如果您想以分布式方式进行处理,您可能希望看到hadoop流。
如果您真的只想查找文件,并且hadoop的版本>=2.7(目前还没有发布),那么可以使用 find . 根据这一问题,该功能已添加到版本中 2.7.0 .
另一种选择是将解决方案与 awk 已经提供的 grep ```
hadoop dfs -lsr | grep -v '^d'

或仅获取文件名:

hadoop dfs -lsr | grep -v '^d' | tr -s ' ' | cut -f 8 -d ' '

这里我们只取以a开头的行 `d` 然后我们把这些空间压缩成一个单独的空间,然后得到结果的一列。
oymdgrw7

oymdgrw72#

是的,你可以用awk来做这个。

hadoop dfs -lsr <path to hdfs directory> | awk '{ if($1 !~ /d.*/) { print $0; } }'

说明:awk将输入流划分为列。列的编号为1到$nf,即字段数。
$1表示第一列——drwxrwx thingy。此代码测试第一列是否以“d”开头。如果不是以“d”开头,它将进入块并打印整行($0表示整行,而$1、$2等表示行中的列)。
编辑:如果您只想打印文件名,请替换“打印$0;”使用“print$nf;”

相关问题