คำตอบ:
คุณสามารถทำได้:
gzip *
gzip จะบอกให้คุณข้ามไฟล์ที่มี.gz ตอนจบไปแล้ว
หากข้อความนั้นเข้ามาในแบบที่คุณสามารถใช้:
gzip -q *
สิ่งที่คุณพยายามใช้งานไม่ได้เพราะgzipไม่ได้อ่านชื่อไฟล์ของไฟล์ที่จะบีบอัดจาก stdin เพื่อให้ใช้งานได้คุณจะต้องใช้:
ls | grep -v gz | xargs gzip
คุณจะยกเว้นไฟล์ที่มีรูปแบบgzที่ใดก็ได้ในชื่อไฟล์ไม่ใช่แค่ในตอนท้าย¹คุณต้องทราบด้วยว่าการแยกเอาต์พุตของlsอันตรายเมื่อคุณมีชื่อไฟล์ที่มีช่องว่างบรรทัดใหม่และอื่น ๆ
วิธีแก้ไขที่สะอาดกว่าโดยไม่ต้องgzipข้ามไฟล์ที่มีจุด.gzสิ้นสุดคือจัดการไฟล์ที่ไม่ได้บีบอัดในไดเรกทอรีย่อย:
find . -type f ! -name "*.gz" -exec gzip {} \;
¹ ตามที่izkataแสดงความคิดเห็น: ใช้.gzเพียงอย่างเดียวเพื่อปรับปรุงสิ่งนี้จะไม่ทำงาน คุณจะต้องใช้หรือgrep -vF .gz grep -v '\.gz$'นั่นยังคงเป็นอันตรายจากlsผลลัพธ์ของการประมวลผล
$การยกเว้น ( -v) ไฟล์ทั้งหมดที่มีชื่อประกอบด้วยอักขระสามตัวขึ้นไปรวมถึงอักขระใด ๆ ตามด้วย "gz" ที่ใดก็ได้ในชื่อไฟล์ ดังนั้นจะรวมไฟล์ที่มีชื่อที่ขึ้นต้นด้วย "gz"
gzชื่อใด ๆ (ยกเว้นจุดเริ่มต้น) ดังนั้นจึงเป็นการดีกว่าที่จะยึดไว้ หากไม่ได้ใช้$มันจะอ่านราวกับว่าคุณไม่ได้ตระหนักถึงความ.หมายของ regex ดังนั้นส่วนที่เหลือของความคิดเห็นที่สับสน
$เพื่อให้ชัดเจนยิ่งขึ้น และคุณไม่ได้หลบหนี.ไปดังนั้นมันจะแยกไฟล์ที่ขึ้นต้นด้วยgz(เนื่องจากไม่มี "อักขระใด ๆ มาก่อนgz")