2012-04-26 35 views
30

Ứng dụng của tôi được xây dựng trên Java EE.Cách tìm kiếm một chuỗi trong các tệp JAR

Tôi có khoảng 50 lọ trong ứng dụng này.

Có thể tìm kiếm một từ khóa cụ thể (thực sự tôi muốn tìm kiếm từ khóa BEGIN REQUEST) không?

+0

Hope this helps -> http://www.unix.com/unix-dummies-questions-answers/39683-find-string-jar-file.html xem xét os của bạn là linux. chúc may mắn !! –

+0

là bạn đang cố thực hiện điều này khi đang chạy hay là một phần của việc gỡ rối một vấn đề? –

+0

Ý của bạn là gì với "từ khóa"? Tệp Jar bao gồm các lớp java, chứa các mã định danh và chuỗi (và các nội dung khác). Bạn có muốn tìm các lớp xác định hoặc sử dụng chuỗi "BEGIN REQUEST" không? –

Trả lời

69

Bạn có thể sử dụng zipgrep trên Linux,

zipgrep "BEGIN REQUEST" file.jar 

Nếu bạn phải tìm ra điều tương tự trong số lọ, làm

find libdir -name "*.jar" -exec zipgrep "BEGIN REQUEST" '{}' \; 

nơi libdir là một thư mục chứa tất cả các lọ. Lệnh cũng sẽ đệ quy tìm kiếm các thư mục con.

Đối với các cửa sổ, bạn có thể tải về Cygwin và cài đặt zipgrep dưới nó http://www.cygwin.com/

Sửa 1

Để xem tên của tập tin rằng biểu thức đã được tìm thấy bạn có thể làm,

find libdir | xargs -I{} sh -c 'echo searhing in "{}"; zipgrep "BEGIN REQUEST" {}'

+2

Bạn cũng có thể tham gia với zipgrep trên OSX và các công trình trên hoàn hảo. Nhiều đánh giá cao fella! – reevesy

+0

Đã lưu ngày của tôi, cảm ơn @kal! –

+0

là có cách nào tôi có thể liệt kê từ đó mỗi dòng đến từ đâu? – Bee

0

Lệnh dưới đây hiển thị kết quả có tên tệp và tên tệp jar.

  1. Để tìm chuỗi trong danh sách tệp jar.

    find <%PATH of the Folder where you need to search%> -name "*.jar" -print -exec zipgrep "jar$|<%STRING THAT YOU NEED TO FIND>" '{}' \; 
    
  2. Để tìm tên lớp trong danh sách tệp jar.

    find . -name "*.jar" -print -exec jar tvf {} \; |grep -E "jar$|<%CLASS NAME THAT YOU NEED TO FIND>\.class" 
    
0

Tìm kiếm bên trong một lọ hoặc tìm tên lớp, trong đó có một văn bản đặc biệt là rất dễ dàng với tìm kiếm WinRar. Hiệu quả của nó và luôn làm việc cho tôi ít nhất.

chỉ cần mở bất kỳ bình nào trong WinRar, nhấp vào ".." cho đến khi bạn đến thư mục trên cùng từ nơi bạn muốn bắt đầu tìm kiếm (bao gồm cả thư mục con).

Hãy chắc chắn để kiểm tra các tùy chọn dưới đây:

1.) Cung cấp '*' trong 'tên tập tin để tìm' lĩnh vực,

2.) chọn hộp kiểm 'find 'loại Archive' trong thư mục con ',' tìm trong tệp ',' tìm trong lưu trữ '.

3

Thận trọng: Đây không phải là câu trả lời chính xác, nó chỉ là cách tiếp cận heuristic nhanh chóng. Nếu bạn cần tìm thứ gì đó giống như tên của một lớp (ví dụ: cái bình nào có lớp Foo?) Hoặc có thể là tên phương thức, thì điều này có thể hoạt động.

grep --text 'your string' your.jar 

Điều này sẽ tìm kiếm tệp jar như thể nó là văn bản. Điều này nhanh hơn vì nó không mở rộng kho lưu trữ, nhưng đó cũng là lý do tại sao nó kém chính xác hơn.Nếu bạn cần phải được đầy đủ thì đây không phải là cách tiếp cận bạn nên sử dụng, nhưng nếu bạn muốn thử một cái gì đó một chút nhanh hơn trước khi kéo ra zipgrep đây là một cách tiếp cận tốt.


Từ man grep,

-a, --text 
      Process a binary file as if it were text; this is equivalent 
      to the --binary-files=text option. 
0

Fastjar - rất cũ, nhưng phù hợp với nhu cầu của bạn. Fastjar chứa công cụ gọi là jargrep (hoặc grepjar). Sử dụng cùng một cách như grep:

> locate .jar | grep hibernate | xargs grepjar -n 'objectToSQLString' 

org/hibernate/type/EnumType.class:646:objectToSQLString 
org/hibernate/sql/Update.class:576:objectToSQLString 
org/hibernate/sql/Insert.class:410:objectToSQLString 
org/hibernate/usertype/EnhancedUserType.class:22:objectToSQLString 
org/hibernate/persister/entity/SingleTableEntityPersister.class:2713:objectToSQLString 
org/hibernate/hql/classic/WhereParser.class:1910:objectToSQLString 
org/hibernate/hql/ast/tree/JavaConstantNode.class:344:objectToSQLString 
org/hibernate/hql/ast/tree/BooleanLiteralNode.class:240:objectToSQLString 
org/hibernate/hql/ast/util/LiteralProcessor.class:1363:objectToSQLString 
org/hibernate/type/BigIntegerType.class:114:objectToSQLString 
org/hibernate/type/ShortType.class:189:objectToSQLString 
org/hibernate/type/TimeType.class:307:objectToSQLString 
org/hibernate/type/CharacterType.class:210:objectToSQLString 
org/hibernate/type/BooleanType.class:180:objectToSQLString 
org/hibernate/type/StringType.class:166:objectToSQLString 
org/hibernate/type/NumericBooleanType.class:128:objectToSQLString 
org/hibernate/type/CustomType.class:543:objectToSQLString 
org/hibernate/type/TimeZoneType.class:204:objectToSQLString 
org/hibernate/type/DateType.class:343:objectToSQLString 
org/hibernate/type/LiteralType.class:18:objectToSQLString 
org/hibernate/type/ByteType.class:189:objectToSQLString 
org/hibernate/type/LocaleType.class:259:objectToSQLString 
org/hibernate/type/CharBooleanType.class:171:objectToSQLString 
org/hibernate/type/TimestampType.class:409:objectToSQLString 
org/hibernate/type/CurrencyType.class:256:objectToSQLString 
org/hibernate/type/AbstractCharArrayType.class:219:objectToSQLString 
org/hibernate/type/FloatType.class:177:objectToSQLString 
org/hibernate/type/DoubleType.class:173:objectToSQLString 
org/hibernate/type/LongType.class:223:objectToSQLString 
org/hibernate/type/IntegerType.class:188:objectToSQLString 
0

Sử dụng jfind jar

JFind thể tìm thấy một tập tin lớp Java bất cứ nơi nào trên hệ thống tập tin, ngay cả khi nó được ẩn nhiều cấp độ sâu trong một cái lọ trong một tai trong một zip!

http://jfind.sourceforge.net/

Các vấn đề liên quan