このようにして、すべての.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
*
これは重複します。正規表現では、*
前の記号がゼロを含む複数回表示されることを指定するために使用されます。先行記号なしで使用することは意味がないので、この特別な場合には記号自体が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*