Giải nén nhiều file zip một lúc trên Ubuntu

Để giải nén file zip trên Ubuntu, chúng ta có sẵn công cụ unzip, cú pháp giải nén 1 file sẽ là:

unzip filename.zip

Một cách tự nhiên, chúng ta sẽ thử giải nén nhiều file zip trong thư mục hiện thời với câu lệnh:

unzip *.zip

Tuy nhiên những gì nhận được sẽ là 1 thông báo lỗi:

caution: filename not matched

Nguyên nhân là do câu lệnh trên sẽ được diễn giải thành:

unzip file1.zip file2.zip file3.zip

và được Ubuntu hiểu là giải nén file2.zip và file3.zip nằm trong file1.zip. Và nếu trong file1.zip không có chứa file2.zip hay file3.zip (mà thường là thế) thì sẽ nhận được thông báo lỗi trên.

Để khắc phục nhược điểm trên, có 2 cách thường được dùng: một là làm cho Ubuntu hiểu đúng ý nghĩa của dấu * như chúng ta mong muốn và hai là liệt kê các file zip trong thư mục hiện thời rồi giải nén chúng.

Phương pháp thứ 2 là cách tiếp cận khá trực tiếp và dễ hiểu. Chúng ta sẽ xem xét phương pháp này trước.

Để liệt kê các file trong thư mục hiện thời, chúng ta có thể dùng lệnh dir, ls hay dùng vòng lặp for. Do đó ta có 1 số cách làm sau đây:

ls *.zip | xargs -n1 unzip

hoặc

for z in *.zip; do unzip $z; done

Có thể nhận thấy là nếu dùng vòng lặp for thì không cần phải chuyển đầu vào cho lệnh khác, còn nếu dùng ls hay dir thì cần có lệnh xargs để chuyển kết quả đó thành tham số cho lệnh unzip phía sau, tham số -n1 ám để chỉ lệnh unzip nhận 1 tham số.

Phương pháp làm cho Ubuntu hiểu đúng ý nghĩa của dấu * có thể thực hiện được bằng cách bắt Ubuntu hiểu đó không phải là kí tự wild card khi thực thi. Để làm điều này, có 2 mẹo nhỏ đó là dùng dấu nháy đơn (') hoặc kép (") và dùng kí tự xổ ngược \. Do đó ta có các lệnh tương ứng sau:

unzip '*.zip'

hoặc

unzip \*.zip

Ở đây cần hiểu là dấu * không được dịch thành tên các file khi bắt đầu chạy lệnh theo cách mà bash làm bình thường (tức là dịch thành unzip file1.zip file2.zip file3.zip) mà được dịch thành tên file trong mỗi lần chạy unzip (tức là dịch thành unzip file1.zip; unzip file2.zip; unzip file3.zip).

Một số link các bạn có thể tham khảo thêm:
Cyberciti: How do I unzip multiple / many files under Linux?
Ubuntu Forum: How do I unzip multiple files at once?

4 nhận xét :

  1. Ừ, đổi sang theme này cho ấm áp, sắp đông lạnh rồi ;)

    Trả lờiXóa
  2. cái theme nhìn nghệ thuật ghê đó,dạo này chú thế nào?Có rì mói không?

    Trả lờiXóa
  3. Cám ơn anh. Em dạo này cũng vậy thôi, sắp đến lúc phải học để thi cử rồi :D. À, em có làm forum về phần mềm tại http://forum.rilwis.tk, anh rảnh ghé qua giúp đỡ em cái :)

    Trả lờiXóa