Câu trả lời:
Vì vậy, nếu tôi hiểu chính xác, bạn đang cố lưu trữ các tệp và thư mục trong một thư mục cụ thể nhưng không bao gồm thư mục gốc.
Thí dụ:
/test/test.txt
/test/test2.txt
trong đó test.txt và test2.txt sẽ được lưu trữ trong zip, nhưng không / test /
Bạn có thể cd vào thư mục / test / sau đó chạy một cái gì đó như,
zip -r filename.zip ./*
Mà sẽ tạo một kho lưu trữ trong cùng một thư mục có tên filename.zip. Hoặc nếu chạy nó từ bên ngoài thư mục bạn có thể chạy,
zip -r test.zip test/*
/ * Là phần chỉ bao gồm nội dung của thư mục, thay vì toàn bộ thư mục.
Chỉnh sửa: OP muốn nhiều khóa, giải pháp cuối cùng là một chút hack, tôi tò mò liệu có cách nào tốt hơn để làm điều này.
for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;
for d in */ ; do base=$(basename "$d") ; zip -rj "${base}.zip" "$d" ; done;
zip -r test.zip test/*
không hoạt động. Có cách nào chính xác để đạt được điều này từ bên ngoài thư mục không?
Sử dụng -j
hoặc --junk-paths
tùy chọn trong lệnh zip của bạn.
Từ trang zip man :
-j --junk-paths Store just the name of a saved file (junk the path), and do not store directory names. By default, zip will store the full path (relative to the current directory).
Làm thế nào về lệnh này?
$ cd somedir ; zip -r ../zipped.zip . * ; cd ..
cd
. Hy vọng có một cách để xác định đường dẫn được lưu trữ chính xác hơn.
Hi vọng điêu nay co ich.
(cd directory && zip -r ../out.zip .)
Nó giữ shell chính trong cùng thư mục và chỉ thay đổi thư mục của shell phụ sẽ chết sau lệnh.