ฉันมีไดเรกทอรีไฟล์ ZIP (สร้างขึ้นในเครื่อง Windows) ฉันสามารถคลายซิปด้วยตนเองโดยใช้unzip filename
แต่ฉันจะแตกไฟล์ ZIP ทั้งหมดในโฟลเดอร์ปัจจุบันผ่านเชลล์ได้อย่างไร?
ใช้เซิร์ฟเวอร์ Linux Ubuntu
ฉันมีไดเรกทอรีไฟล์ ZIP (สร้างขึ้นในเครื่อง Windows) ฉันสามารถคลายซิปด้วยตนเองโดยใช้unzip filename
แต่ฉันจะแตกไฟล์ ZIP ทั้งหมดในโฟลเดอร์ปัจจุบันผ่านเชลล์ได้อย่างไร?
ใช้เซิร์ฟเวอร์ Linux Ubuntu
คำตอบ:
สิ่งนี้ใช้ได้ใน bash ตามลิงค์นี้ :
unzip \ *. zip
เพียงใส่เครื่องหมายอัญประกาศเพื่อหนีไวด์การ์ด:
unzip "*.zip"
สคริปต์ทุบตีต่อไปนี้จะแตกไฟล์ zip ทั้งหมดในไดเรกทอรีปัจจุบันไปยังไฟล์ dirs ใหม่ด้วยชื่อไฟล์ของไฟล์ zip เช่น:
ไฟล์ต่อไปนี้:
myfile1.zip
myfile2.zip
จะถูกแยกไปที่:
./myfile1/files...
./myfile2/files...
เชลล์สคริปต์:
#!/bin/sh
for zip in *.zip
do
dirname=`echo $zip | sed 's/\.zip$//'`
if mkdir "$dirname"
then
if cd "$dirname"
then
unzip ../"$zip"
cd ..
# rm -f $zip # Uncomment to delete the original zip file
else
echo "Could not unpack $zip - cd failed"
fi
else
echo "Could not unpack $zip - mkdir failed"
fi
done
"
ลงในชื่อไฟล์
unzip * .zip หรือถ้าอยู่ในโฟลเดอร์ย่อย
find . -name "*.zip" -exec unzip {} \;
gzip'ed
ไฟล์ใช้gunzip -rfk .
สำหรับการคลายไฟล์ซ้ำภายในโฟลเดอร์ที่เกี่ยวข้อง
เปิดเครื่องรูด.zip
ไฟล์ทั้งหมดและจัดเก็บเนื้อหาในโฟลเดอร์ใหม่ด้วยชื่อเดียวกันและในโฟลเดอร์เดียวกันกับ.zip
ไฟล์:
find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
นี่คือส่วนขยายของคำตอบและที่อยู่ของ@ phatmanace @ RishabhAgrahari :
สิ่งนี้จะแยกไฟล์ zip ทั้งหมดในไดเรกทอรีปัจจุบันจะเกิดอะไรขึ้นถ้าฉันต้องการให้มีการแยกไฟล์ zip (อยู่ในโฟลเดอร์ย่อย) ในโฟลเดอร์ย่อยที่เกี่ยวข้อง
gzip'ed
ไฟล์ใช้gunzip -rfk .
สำหรับการคลายไฟล์ซ้ำภายในโฟลเดอร์ที่เกี่ยวข้อง
find: illegal option -- n
ใช้UnZip 6.00 - ใครอีกบ้าง?
find . -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
คุณลืมรายชื่อไดเรกทอรี
for i in *.zip; do
newdir="${i:0:-4}" && mkdir "$newdir"
unzip "$i" -d "$newdir"
done
การดำเนินการนี้จะแตกซิปไฟล์บีบอัดทั้งหมดลงในโฟลเดอร์ใหม่ที่ตั้งชื่อด้วยชื่อไฟล์ของไฟล์เก็บถาวรซิป
a.zip
b.zip
c.zip
จะถูกคลายซิปลงในa
b
c
โฟลเดอร์ตามลำดับ
aunpack -e *.zip
พร้อมatool
ติดตั้ง มีข้อได้เปรียบที่จัดการกับข้อผิดพลาดได้อย่างชาญฉลาดและแยกออกเป็นไดเรกทอรีย่อยเว้นแต่ zip จะมีเพียงไฟล์เดียว ดังนั้นจึงไม่มีอันตรายที่ทำให้เกิดมลพิษในไดเรกทอรีปัจจุบันที่มีไฟล์จำนวนมากเนื่องจากมีunzip
ไฟล์ zip ที่ไม่มีโครงสร้างไดเรกทอรี
ในเชลล์ POSIX ใด ๆ สิ่งนี้จะแตกไฟล์ในไดเรกทอรีอื่นสำหรับไฟล์ซิปแต่ละไฟล์:
for file in *.zip
do
directory="${file%.zip}"
unzip "$file" -d "$directory"
done
for file in *.zip; do unzip "$file" -d "${file%.zip}"; done
ใช้สิ่งนี้:
for file in `ls *.Zip`; do
unzip ${file} -d ${unzip_dir_loc}
done
for file in 'ls *.zip'; do unzip "${file}" -d "${file:0:-4}"; done
for file in *.zip; do ...
ถูกไหม?
หากเป็นไฟล์gzip'd
ต่างๆ จากนั้นใช้:
gunzip -rfk .
จากไดเรกทอรีรากไปยังแยกไฟล์ซ้ำในไดเรกทอรีที่เกี่ยวข้องโดยการเก็บไฟล์เดิม (หรือลบ-k
เพื่อลบพวกเขา)
นี่คือตัวแปรของคำตอบของPedro Lobito โดยใช้วิธีวนลูปผ่านไดเรกทอรีซ้ำ ๆ เพื่อลบไฟล์ที่มีคำสอนส่วนขยายบางอย่าง :
shopt -s globstar
root_directory="."
for zip_file_name in **/*.{zip,sublime\-package}; do
directory_name=`echo $zip_file_name | sed 's/\.\(zip\|sublime\-package\)$//'`
printf "Unpacking zip file \`$root_directory/$zip_file_name\`...\n"
if [ -f "$root_directory/$zip_file_name" ]; then
mkdir -p "$root_directory/$directory_name"
unzip -o -q "$root_directory/$zip_file_name" -d "$directory_name"
# Some files have the executable flag and were not being deleted because of it.
# chmod -x "$root_directory/$zip_file_name"
# rm -f "$root_directory/$zip_file_name"
fi
done
for i in `ls *.zip`; do unzip $i; done
หากต้องการแตกไฟล์ทั้งหมดในไดเรกทอรีให้พิมพ์ cmd นี้ในเทอร์มินัล:
unzip '*.zip'
ใช้
sudo apt-get install unzip
unzip file.zip -d path_to_destination_folder
เพื่อคลายซิปโฟลเดอร์ใน linux