Câu hỏi Cách giải nén vào thư mục đã cho


Tôi có một danh sách với đường dẫn của tệp .zip, được thu thập bằng lệnh bên dưới. Tôi muốn giải nén chúng vào thư mục đó, nơi chúng tồn tại.

find . -name "*.zip" -print > outfile.txt

outfile.txt giống như:

./TWO/two.zip
./ONE/one.zip

Tôi có run_all kịch bản để tự động hóa nó, nhưng làm thế nào tôi có thể xác định thư mục đầu ra?

run_all outfile.txt 'unzip -u $1'

2
2018-01-11 07:53


gốc




Các câu trả lời:


Sử dụng -d cờ.

unzip -d output_dir/ zipfiles.zip

Để tự động hóa nó:

#!/bin/bash
for i in `cat outfile.txt`; do
    output_dir=$(dirname $i)
    unzip -d $output_dir $i
done

CHỈNH SỬA: Như @dessert gợi ý, bạn có thể làm điều này như một giải pháp thay thế tốt hơn:

while IFS='' read -r i || [[ -n "$i" ]]; do unzip -d ${i%/*} $i; done <outfile.txt

2
2018-01-11 07:55



Điều này sẽ phá vỡ trên một khoảng trống duy nhất trong một con đường, bạn nên sử dụng read. Ngoài ra bash vỏ có thể làm dirname's làm việc với mở rộng tham số: while IFS='' read -r i || [[ -n "$i" ]]; do unzip -d ${i%/*} $i; done <outfile.txt. - dessert