cách nhanh nhất để grep jar cho một tên cụ thể trong đó?


7

Tôi đang cố gắng tìm tất cả các lọ có springtên của nó. Tôi đang làm việc với các cửa sổ và sử dụng cygwin để chạy các lệnh linux. Lệnh dưới đây của tôi có đúng không?

find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \;

Vì một số lý do, nó vẫn đang xử lý và chưa có kết quả trên màn hình. Bất kỳ cách nhanh chóng để grep tệp jar với một tên cụ thể?

Ví dụ: bên dưới là các tệp jar hợp lệ có trong đó -

spring-web.jar
spring-core.jar
test-spring.jar 

Bạn có thể thử mà không grepnhư thế này. find /some/dir -type f -name "*spring*.jar"
Ramesh

@Ramesh, OP đang tìm cách kiểm tra danh sách jar chospring
iruvar

@ 1_CR, vâng, vì vậy lệnh của tôi cũng là tìm kiếm tất cả jarcác tệp có từ springtrong đó.
Ramesh

Lệnh của bạn đang tìm kiếm một tên tệp có lò xo trong đó, nhưng nó đang xem các tệp trong tệp jar.
ctrl-alt-delor

@richar: không chỉ tên jar có mùa xuân trong tên của nó.
kho vũ khí

Câu trả lời:


3

Tôi không tin rằng jarlệnh chấp nhận nhiều .jartệp bằng cách lập luận vì vậy AFAIK một lệnh jargọi duy nhất giải quyết tất cả .jarcác tệp là không cần thiết. Một tùy chọn để tăng tốc mọi thứ bằng cách tránh một lệnh thực thi findcho mỗi .jartệp là như sau

find . -name '*.jar' -exec sh -c \
'for f; do  jar -tf "$f" | grep --label="$f" "spring"; done' sh {} +

2

Lệnh dưới đây sẽ tìm các tệp jar có chuỗi con springtrong đó.

find /some/dir -type f -name "*spring*.jar"

Bây giờ, lệnh ban đầu của bạn xem qua nội dung, đó không phải là văn bản xung quanh nó hoặc các ví dụ nói.

find . -name "*.jar" -exec jar tf '{}' \| grep -H "spring" \;

Vui lòng tìm mô tả trò chuyện này trong đó Gilles giải thích lý do tại sao lệnh trên không phải là thứ bạn đang tìm kiếm.

Kiểm tra

[root@keithpc check]# cd jar_check/
[root@keithpc jar_check]# ls
[root@keithpc jar_check]# touch spring1.jar
[root@keithpc jar_check]# touch 1spring.jar
[root@keithpc jar_check]# touch no_sss_spring.jar
[root@keithpc jar_check]# touch spring.txt

Đầu ra :

[root@keithpc jar_check]# find ./ -type f -name "*spring*.jar"
./no_sss_spring.jar
./1spring.jar
./spring1.jar

Như bạn có thể thấy, spring.txttập tin không được trả lại mà tôi tin là những gì bạn đang tìm kiếm.

Bây giờ, để hiểu lệnh của bạn làm gì,

  1. Đầu tiên tôi đã tạo một tệp java có tên là springtest.
  2. Bây giờ, tôi tạo classtệp bằng cách chạy javalệnh trên javatệp.
  3. Bây giờ, tôi thêm nó vào tệp jar bằng cách chạy lệnh jar.
  4. Bây giờ, khi tôi chạy lệnh của bạn, nó sẽ trả về cho tôi classtệp chứ không phải tệp jar mà bạn đang tìm kiếm.

     [root@keithpc jar_check1]# javac springtest.java
     [root@keithpc jar_check1]# java springtest
     Hello,spring
     [root@keithpc jar_check1]# jar cvf springtest.jar springtest.class
     added manifest
     adding: springtest.class(in = 426) (out= 286)(deflated 32%)
    
     ##Here I run your command after creating the jar file. 
    
     [root@keithpc jar_check1]# find . -name "*.jar" -exec jar tf '{}' \| 
     grep -H "spring" \;
     ##As you can see, it returns me the class file rather than the 
     jar file as the output.  
    
     springtest.class
    
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.