Yanıtlar:
Yani doğru anlarsam, belirli bir klasördeki dosyaları ve klasörleri arşivlemeye çalışıyorsunuz, ancak kök klasörü eklemeden çalışıyorsunuz.
Örnek:
/test/test.txt
/test/test2.txt
burada test.txt ve test2.txt zip içinde saklanır, ancak / test /
/ Test / dizinine girip sonra şöyle bir şey çalıştırabilirsin,
zip -r filename.zip ./*
Bu da filename.zip adlı aynı klasörde bir arşiv oluşturur. Veya çalıştırabileceğiniz klasörün dışından çalıştırıyorsanız,
zip -r test.zip test/*
/ *, Klasörün tamamı yerine yalnızca klasör içeriğini içeren kısımdır.
Düzenleme: OP birden fazla fermuar istedi, çözüm biraz kesmek oldu, bunu yapmanın daha iyi bir yolu olup olmadığını merak ediyorum.
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/*
çalışmıyor. Bunu dizinin dışından elde etmenin doğru bir yolu var mı?
Kullanın -j
veya --junk-paths
Zip komut seçeneği.
Gönderen zip adam sayfası :
-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).
Bu komuttan ne haber?
$ cd somedir ; zip -r ../zipped.zip . * ; cd ..
cd
. Saklanan yolu daha kesin olarak belirtmenin bir yolu olduğunu umuyordum.
Bu yardımcı olur umarım.
(cd directory && zip -r ../out.zip .)
Ana kabuğu aynı dizinde tutar ve yalnızca komuttan sonra ölen alt kabuğun dizinini değiştirir.