ฉันมีไดเรกทอรีไฟล์ 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"
donefor file in *.zip; do unzip "$file" -d "${file%.zip}"; done
                    ใช้สิ่งนี้:
for file in `ls *.Zip`; do
unzip ${file} -d ${unzip_dir_loc}
donefor 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
donefor 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