通过这种方式我们可以获得所有.jar文件列表:
# su -l hdfs -c " hdfs dfs -ls /home/test/jt/*.jar "
-rw-r--r-- 3 hdfs hdfs 501879 2019-03-04 10:35 /home/test/jt/cfjrfr-3.8.1.jar
-rw-r--r-- 3 hdfs hdfs 870215 2019-03-04 10:35 /home/test/jt/dhe-1.2.1.jar
-rw-r--r-- 3 hdfs hdfs 2734339 2019-03-04 10:35 /home/test/jt/34343-25.1-jre.jar
-rw-r--r-- 3 hdfs hdfs 30053 2019-03-04 10:35 /home/test/jt/23424.jar
-rw-r--r-- 3 hdfs hdfs 16481 2019-03-04 10:35 /home/test/jt/h324.jar
-rw-r--r-- 3 hdfs hdfs 29725 2019-03-04 10:35 /home/test/jt/3223kj3.jar
我们还尝试使用 grep 的不同方法,但此语法不返回任何输出:
su -l hdfs -c " hdfs dfs -ls /home/test/jt" | grep "*.jar$"
我哪里错了?
答案1
*
这里是多余的。在正则表达式中,*
用于指定前一个符号可以出现任意次数,包括 0 次。在没有前面符号的情况下使用它是没有意义的,因此在这种特殊情况下grep
会查找*
符号本身(一般情况下您需要在它前面用于\
此目的)。
.
也有匹配任何符号的特殊含义,因此如果您想涵盖存在一些虚假扩展名(例如.djar
, 或以 结尾的无扩展名文件的情况jar
),您也需要在其前面添加\
。
所以,简而言之,您只需要:
su -l hdfs -c " hdfs dfs -ls /home/test/jt" | grep "\.jar$"
答案2
使用 grep -E
su -l hdfs -c " hdfs dfs -ls /home/test/jt" | grep -E .jar$
它在第一个命令的输出中搜索以 .jar 结尾的所有文件
答案3
试试这个:
ls -l | grep *.jar*