2012-03-14 7 views
15

Ben bir zip dosyası oluşturmak için çalışıyoruz ve dizin yapısının en korumak istiyor am olmadan bir zip dosyası oluşturmak değil, nasıl. Ben kullanıyorum komut şöyledir: Ben bara üzerinden recurse ve (öyle ki) korunmuş dizin yapısı ile tüm dosyaları eklemek istiyorumkomut satırından tanımlanan rootdir bütün dizin yapısı

zip -r out.zip /foo/bar/ 

. Ancak, oluşturulan zip dosyasında 'foo' nun üst düzey dizin olmasını istemiyorum. Barın en üst düzey dizin olmasını isterim.

bu konuda gitmek için herhangi bir kolay yolu var mı? Sorunu önlemek için sıkıştırmadan önce dizinleri değiştirebileceğimin farkındayım, ancak bunu gerektirmeyen bir çözüm arıyorum.

cevap

8

Ben fermuar üst düzey dizin dışlamak için bir yolu vardır inanmıyorum. Bence en iyi bahse girerim: pushd/foo; zip -r out.zip ./bar; popd;

Ama bu tam size istemediğini söyledi cevap tür.

+2

Tar -C/foo/bar -c out.tar * 'dan şüpheleniyorum, onu daha da mutlu ediyor. –

+1

Bu ikinciye. Ben bir mac var ve zip gerekir ve tar.gz. pushd gerçekten iyi bir alternatif gibi görünüyor. – slott

8

Bu yapmalıyım: /foo/out.zip

+1

OP, dizinleri değiştirmek istemediğini söyledi. – Amala

+0

Bu cevap, OP'nin istediği şeyi yapar. Kabul edilen cevap olmalıydı. – Jason

+0

Bir PHP betiğinde zip çalışıyorum. Şimdi ne olacak? –

-1

birisi bu stumbles ve yukarıdaki çözüm memnun değilse, burada çok basit aşağıda yer

cd /foo/bar/ 
zip -r ../out.zip * 

arşivi olacak Uzun alt dizinleri sıkıştırmak için geçici çözüm. Bu geçici C bir klasör oluşturarak içerir:/ve silme basitçe sıkıştırma sonrası:

ZipFiles <- list.files(".../ZipFiles") # Insert your long subdirectory into .../ 

dir.create("C:/ZipFiles") 
dir.create(".../FolderToBeZipped") 
file.copy(from = ZipFiles,to = "C:/ZipFiles") 
zip(".../FolderToBeZipped", 
    files = "C:/ZipFiles") 
unlink("C:/ZipFiles",recursive = TRUE) 

sonucu daha sonra is .../FolderToBeZipped.zip/ZipFiles/

yararı değil gerektiğidir kodu yürütürken alt dizin (veya proje) içinde olmak.