unzip script unix [ปิด]


-6

ฉันเป็นผู้ใช้ใหม่ในยูนิกซ์ที่พยายามทำสคริปต์อย่างง่ายใน bash ที่จะทำการแตกไฟล์หลายไฟล์ในตำแหน่งที่ฉันแสดง ฉันคิดไม่ออกว่าทำไมมันถึงพัง ฉันกำลังแทรกสคริปต์ด้านล่าง ฉันหวังว่าจะย้ายไฟล์. tar.7z ที่บีบอัดไปไว้ในไดเรกทอรีอื่นในภายหลัง (ด้วยเหตุนี้ฉันจึงสร้างไดเรกทอรีใหม่ในสคริปต์ด้านล่าง) แต่ฉันแค่พยายามทำให้ส่วนหลักทำงานก่อน

#!~/bash
# My program to try to unzip several files with ending of tar.7z
# I have inserted the ability to enter the directory where you want this to be done 

echo "What file location is required for unzipping?"

read dirloc

cd $dirloc
mkdir oldzippedfiles
for directory in $dirloc
        do
                if
                [ $directory=*.tar.7z ]
                then
                cat $directory | 7za x -an -txz -si -so | tar -xf -
        fi
        done

echo "unzipping of file is complete"

exit 0

4
คุณหมายถึงอะไรโดยการหยุดทำ คุณมีผิดบรรทัด shebangคือว่าพิมพ์ผิดหรือไม่? คุณได้รับข้อผิดพลาดอะไร คุณอยู่บน Unix หรือ Linux หรือไม่ หาก Linux, Linux ใด ทำไมคุณใช้cat? คุณสามารถให้ตัวอย่างของไดเรกทอรีที่คุณต้องการเรียกใช้สคริปต์นี้ได้หรือไม่?
terdon

ขออภัยฉันอยู่ในเครื่อง Linux เมื่อฉันบอกว่ามันพังหน้าต่างเทอร์มินัลก็ปิดตัวลง ฉันใช้คำสั่ง cat เพื่ออ่านเนื้อหาของไฟล์ ดังนั้นสิ่งนี้ทำให้ฉันถึงสิ่งที่เห็นได้ชัดว่าฉันทำผิดและนั่นคือไดเรกทอรี (ด้านบน) ควรถูกแทนที่ด้วยชื่อไฟล์ - ขอโทษที่ไม่ชัดเจน แต่ฉันได้รับสคริปต์ให้ทำงาน ขอขอบคุณ
user1004856

3
คุณทำให้มันทำงานได้อย่างไร?
slhck

คำตอบ:


2

สคริปต์ของคุณมีข้อผิดพลาดมากมาย:

  1. #!~/bashจะไม่ทำงานเนื่องจากมันทุบตีที่ขยาย~ไปยังโฮมไดเร็กตอรี่ของคุณ คุณต้องระบุเส้นทางแบบเต็มไปยัง bash (โดยปกติ/bin/bash)

  2. for directory in $dirloc จะไม่ทำงานเนื่องจากเหตุผลสองประการ:

    • ไปผ่านไฟล์ภายในคุณจะต้อง$dirloc$dirloc/*

    • *คุณเปลี่ยนแปลงแล้วไดเรกทอรีดังนั้นจึงจะต้องมีความธรรมดา

    นอกจากนี้เนื่องจากคุณวนลูปผ่านไฟล์ฉันขอแนะนำให้คุณเปลี่ยนชื่อตัวแปร

  3. ทดสอบ ( [) ไม่รองรับการจับคู่แบบกลม

    ใช้for file in *.tar.7zแทน

  4. ไม่จำเป็นต้องใช้แมว มันทำให้สิ่งต่าง ๆ ยากขึ้นเนื่องจาก 7zip ไม่สามารถเดารูปแบบไฟล์เก็บถาวรจากส่วนขยายได้ -txzจะไม่ทำงานเว้นแต่คุณจะสร้าง.xzไฟล์ขึ้นมาพร้อมกับ.7zนามสกุล

    ใช้7za a -so $directoryแทน

  5. ฉันไม่แน่ใจว่า-anสวิตช์ควรทำอะไร แต่มันจะพ่นข้อผิดพลาดและฉันค่อนข้างมั่นใจว่าไม่จำเป็น

สคริปต์ที่ใช้งานได้ควรมีลักษณะดังนี้:

#!/bin/bash

read dirloc

cd $dirloc

for file in *.tar.7z
        do
                7za x -so $file | tar -xf -
        done

1
นี่เป็นความเห็นที่ชัดเจน คุณสามารถโพสต์วิธีการแก้ไขของคุณเป็นคำตอบถ้ามันทำงาน
Dennis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.