Score:1

สคริปต์ Bash สำหรับการคัดลอกไฟล์ไปยังไดเร็กทอรีย่อยที่ตั้งชื่อตามเจ้าของไฟล์

ธง cn

ฉันต้องเขียนสคริปต์ทุบตีซึ่งคัดลอกไฟล์จากโฟลเดอร์ไปยังโฟลเดอร์ย่อยที่ตั้งชื่อตามไฟล์ ตัวอย่างเช่น มีไดเร็กทอรีทั่วไป "สำหรับทุกคน" ภายในมีไฟล์และไดเร็กทอรีต่างๆ ไฟล์มีชื่อพร้อมชื่อเจ้าของและสัญลักษณ์อื่นๆ เช่น tom1, tom2, tom3,... หรือ scott1, scott2, scott3 โฟลเดอร์ย่อยตั้งชื่อตามเจ้าของ: tom and scott ฉันต้องเขียนสคริปต์เพื่อคัดลอกไฟล์ทั้งหมดใน dir "For all" ไปยังโฟลเดอร์ย่อยที่เกี่ยวข้อง นี่คือสคริปต์ของฉัน

#!/bin/bash
forall=/home/anastasia/สคริปต์
ซีดี $forall
สำหรับไฟล์ใน $forall
 ทำ
        ถ้า [ -d $file ]
          แล้ว
                ดำเนินต่อ
          ไฟ
          ถ้า [ -e $file ]
          แล้ว
                เจ้าของ='ls -l $file | เกรป "^-" | awk {'พิมพ์ $£3'}'
                $file=$เจ้าของ*   
                cp $file $forall/$owner
                chown $owner $forall/$owner/$file
        ไฟ
เสร็จแล้ว

เกิดอะไรขึ้นกับสคริปต์ของฉัน มันไม่ได้ทำอะไร

Score:1
ธง hr

นอกเหนือจากความจริงที่ว่า

สำหรับไฟล์ใน $forall

จะดำเนินการวนซ้ำเพียงครั้งเดียวด้วย $ไฟล์ ตั้งค่าเป็น ไดเรกทอรี /home/anastasia/สคริปต์ปัญหาพื้นฐานก็คือว่า

เจ้าของ='ls -l $file | เกรป "^-" | awk {'พิมพ์ $£3'}'

กำหนดสตริงตัวอักษร ls -l $ไฟล์ | เกรป "^-" | awk {พิมพ์ ให้กับตัวแปร เจ้าของ (แล้วพยายามดำเนินการ $£3} เป็นคำสั่ง).

สันนิษฐานว่าคุณตั้งใจให้เครื่องหมายคำพูดภายนอกเป็นการแทนที่คำสั่ง แบ็คทิค (และ € 3 เป็นที่ราบ 3):

เจ้าของ=`ls -l $file | เกรป "^-" | awk {'พิมพ์ $3'}`

แต่วิธีสมัยใหม่จะใช้ $(...) แทน:

Owner=$(ls -l $file | grep "^-" | awk {'พิมพ์ $3'})

อย่างไรก็ตาม นั่นเป็นวิธีที่แย่มากในการค้นหาเจ้าของไฟล์ แทนที่จะแนะนำ

เจ้าของ=$(stat -c %U -- "$file")

นอกจากนั้น อย่าลืมอ้างอิงการขยายตัวแปรของคุณ ดังนั้นบางอย่างเช่น (ยังไม่ได้ทดสอบ):

#!/bin/bash

forall=/home/anastasia/สคริปต์

สำหรับไฟล์ใน "$forall"/*
ทำ
  ถ้า [ -d "$file" ]; แล้ว
    ดำเนินต่อ
  ไฟ
  ถ้า [ -e "$file" ]; แล้ว
    เจ้าของ=$(stat -c %U -- "$file")
    cp -n "$file" "$forall/$owner"/
    chown "$owner" "$forall/$owner/$file"
  ไฟ
เสร็จแล้ว

โปรดทราบว่าคุณควรจะสามารถกำจัด เคี้ยว โดยเพิ่มตัวเลือกที่เหมาะสมสำหรับ ซีพี (บางที -หน้า เพื่อรักษาโหมด ความเป็นเจ้าของ การประทับเวลา)

Kanarise avatar
cn flag
ขอบคุณมากสำหรับข้อเสนอแนะอันมีค่า! วิธีที่คุณแนะนำด้วย cp -p และ owner=$(stat -c %U --"$file") นั้นสวยงามกว่าแน่นอน ฉันได้ทำการเปลี่ยนแปลงที่จำเป็นแล้ว และได้ผลกับผู้ใช้รายหนึ่ง ฉันจะตรวจสอบต่อไป

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา