2010-03-02 43 views
9

Tôi đang viết một file build.xml kiến ​​mà làm như sau:Preserve phép file khi giải nén và các tập tin Nén sử dụng kiến ​​

  • Mất một thư mục nén (.zip)
  • unzips nó
  • Thêm một số file
  • Dây khóa kéo lên các tập tin kết quả

một trích đoạn code từ build.xml:

<!-- Unzip SDK to a temporary directory --> 
<unzip src="${zipFile}" dest="tmp"/> 

<!-- pull in the files from another directory --> 
<copy todir="tmp/someDirectory" > 
    <fileset dir="${addedFiles}" /> 
</copy> 

<!-- Zip up modified SDK --> 
<zip destfile="${destDir}" basedir="tmp"/> 

Tất cả đều hoạt động hoàn hảo, ngoại trừ các quyền được đặt cho tệp được nén trước khi chạy bản kiến ​​bị mất trong tệp zip do kiến ​​tạo kiến ​​tạo. Ví dụ: các tệp trước đây không thể thực thi được nữa.

Vì vậy, câu hỏi của tôi: có thể sử dụng kiến ​​để thêm tệp vào lưu trữ zip mà không phá hủy quyền của các tệp đã có?

Tôi đang sử dụng Ant 1.7.1

Trả lời

3

Hóa ra kiến ​​sẽ hủy mọi thông tin về quyền khi giải nén do hạn chế trong Java. Tuy nhiên, những gì có thể là để thêm các tập tin vào một tập tin zip tồn tại mà giữ gìn các điều khoản của các tập tin hiện có:

<!-- Add to zip --> 
<zip destfile="${existingZipFiledirectory}.zip" 
    basedir="${directoryOfFilesToAdd}" 
    update="true" 
/> 

Các kịch bản trên sẽ cập nhật các tập tin zip chỉ định với các nội dung trong basedir, giữ gìn quyền tập tin trong zip gốc.

-1

Theo như tôi biết, tính năng này (preserve0permissions) đã được giới thiệu với Ant 1.8. Các phiên bản trước của Ant không giữ quyền.

Nếu bạn đang mắc kẹt với Ant 1.7.1, bạn có thể sử dụng Tar-nếu tôi không nhầm - lưu trữ các quyền.

+1

Không, 'maintain0permissions' là khác nhau, đó là để làm với trường hợp bạn đang thêm các mục vào một tệp zip từ một tệp khác (sử dụng' '). Ant luôn có thể sao chép các quyền từ một mã zip này sang mã zip khác, nhưng trước khi Ant 1.8 nếu tệp zip nguồn có giá trị bằng 0 trong trường quyền cho một mục nhập nhất định, mục nhập trong tệp đích sẽ luôn được tạo với quyền mặc định (thường là 644 hoặc 755). 'preserve0permissions =" ​​yes "' thay vào đó sẽ giữ nguyên giá trị bằng không trong tệp nén đích. –

7

tôi gặp phải cùng một vấn đề khi sử dụng Ant mục tiêu giải nén:

<unzip src="${project.build.directory}/${project.build.finalName}.zip" dest="${user.home}/apps" overwrite="true" /> 

Việc cho phép các kịch bản shell bên trong file zip bị mất khi sử dụng mục tiêu giải nén ở trên.

Sau khi điều tra, tôi sử dụng mục tiêu ant 'exec' theo sau với giải nén các tham số dòng lệnh, nó hoạt động.

<!-- Use command line unzip to keep file permissions --> 
<exec executable="unzip" spawn="true"> 
    <arg line="-o ${project.build.directory}/${project.build.finalName}.zip -d ${user.home}/apps" /> 
</exec> 

Tôi hy vọng điều này có thể giúp người khác khi gặp phải loại sự cố này.

Cảm ơn, J

+0

Điều này giải nén tệp zip của bạn và bạn có các quyền giống như bạn đã làm khi nó được nén lên? – fscore

+0

Vâng, tôi nghĩ vậy. –

6

Bạn không thể nhận được nhiệm vụ zip để bảo vệ quyền tập tin, nhưng bạn có thể cài đặt chúng một cách rõ ràng:

<zip destfile="installer.zip" > 
<zipfileset filemode="755" dir="../" includes="artisan/install.*" /> 
</zip> 

(Điều này làm việc cho tôi trên Windows và OSX)

+0

Nó hoạt động theo GNU Linux, tôi vừa thử nghiệm với Mageia Linux 4. Cảm ơn. – gouessej

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