Score:0

ls ถึง (คำพูดลอยตัวขนาดใหญ่) "รวม" พวกเขาด้วย grep จากนั้น rm พบทั้งหมดที่ตรงกันในคำสั่งเดียว ... สามารถทำได้หรือไม่

ธง in

ปัญหาง่าย ๆ แต่ฉันไม่เพียงพอในไพพ์คำสั่ง bash เพื่อให้บรรลุถึงแรงบันดาลใจของฉันอย่างเต็มที่ หวังว่าจะได้รวบรวมหากไม่ใช่คำสั่งที่ฉันกำลังค้นหา บางทีฉันอาจปัดกวาดวรรณกรรมเพื่อทำงานให้เสร็จ นี่คือปัญหาของฉัน + สิ่งที่ฉันได้ลองไปแล้ว: ดังนั้นฉันจึงมีฮาร์ดไดรฟ์มือสองและมีความผิดปกติบางอย่าง (ให้ประโยชน์แก่ข้อสงสัย) ทิ้งไว้โดยมีชื่อเป็นชื่อไฟล์ซึ่งทำให้ไม่สามารถรับรู้ได้ว่าเป็นฮาร์ดไดรฟ์ของฉัน ฉันสามารถเข้าถึง root mountpoint และพบไฟล์ที่ฉันต้องการลบด้วย ''' ls -A | grep abcdef ''' มีวิธีการไพพ์รายการ grep'd ไปยังคำสั่ง '''rm -f''' หลังจากนั้นเพราะเมื่อฉันลอง '''ls -A | grep abcdef | rm''' มันไม่ค่อยได้ผล หลังจากความล้มเหลวครั้งใหญ่นั้น (คุณกำลังทำอะไรกันแน่!) ฉันลอง ''' ls -A | grep abcdef <| rm ''' บวกกับการวนซ้ำของหุ้นที่คล้ายกัน แต่ไม่มีประโยชน์ อีกครั้งฉันไม่ต้องการ "คำตอบง่ายๆ" แต่บางทีตำแหน่งที่แน่นอนที่ฉันสามารถรับความช่วยเหลืออย่าง จำกัด ในการเปลี่ยนเส้นทางของเอาต์พุตจะดีมาก (ฉันตอบตัวเองหรือเปล่า? จะทิ้งมันไว้ที่ /dev/null หลังจากนั้นทำในสิ่งที่ฉันต้องการหรือไม่...ฉันจะลอง แต่ความช่วยเหลือในการเปลี่ยนเส้นทางคำสั่งบางอย่างจะไม่เจ็บที่จะขอ) ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก ขอบคุณ

vanadium avatar
cn flag
พยายามพูดให้ละเอียดน้อยลงและตรงประเด็นมากขึ้น ระบุให้ชัดเจนว่า "งาน" ของคุณคืออะไร เช่น เป้าหมายสูงสุดของคุณคืออะไร พิจารณาใช้การจัดรูปแบบรหัสเพื่อแยกความแตกต่างของรหัสเทอร์มินัลจากข้อความ ซึ่งจะช่วยปรับปรุงให้อ่านง่ายขึ้นด้วย คำถามที่ชัดเจนและอ่านได้มีแนวโน้มที่จะดึงดูดคำตอบที่ชัดเจนและอ่านได้
guiverc avatar
cn flag
ฉันจะเขียน `find` เพื่อค้นหาไฟล์ที่คุณต้องการ จากนั้นเพียงเพิ่มตัวเลือก `-delete` ให้กับคำสั่งนั้น (เช่น ให้คุณ `find` ลบไฟล์ที่พบ) ; แต่นั่นไม่ใช่การใช้ท่อตามที่คุณขอ
hr flag
ดูเหมือนว่าคุณกำลังมองหา `xargs`... อย่างไรก็ตาม ตามที่ระบุโดย @guiverc โดยทั่วไปแล้ว `find` จะถูกเลือกมากกว่า `ls` + `grep` + (xargs) `rm`
Jake Baldwin avatar
in flag
@vanadium - ฉันคิดว่าฉันทำ ฉันใช้อุปกรณ์มือถือในการโพสต์นี้ และที่ด้านล่างของกล่องคำอธิบายมีวิธีการทำเช่นนั้น ฉันจึงคิดว่ามันไม่ได้แสดงในช่องป้อนข้อมูลของฉัน ฉันมีผลลัพธ์จากคำสั่ง grep'd "ls" ฉันต้องการให้เป็น rm'd แทนที่จะแสดงในรายการยาว
Jake Baldwin avatar
in flag
@guiverc - ฉันจะ "ค้นหา" พวกเขา แต่ฉันต้องการไฟล์ทั้งหมดที่มีชื่อเฉพาะที่ใดก็ได้ในนั้น ดังนั้นฉันจึง "ls -AR | grep abc" เป็นสิ่งที่ดีที่สุดที่ฉันทำได้ หากมีวิธีที่ดีกว่าในการ "ค้นหา" โปรดแสดงให้ฉันเห็น (ไม่มีการประชดประชัน)
Jake Baldwin avatar
in flag
@steeldriver - ฉันจะตรวจสอบมัน xargs.... ฉันจะต้องอ่าน man page ในนั้น ขอบคุณทุกคน
guiverc avatar
cn flag
`find` เป็นคำสั่งที่ช่วยให้ regex เหมือนกับสิ่งที่คุณใช้ (และซับซ้อนกว่านั้นมาก)... เช่น โดยใช้อนุประโยค `-name` ข้อดีอย่างหนึ่งของ *unix* (posix หรือ GNU/Linux) คือมีหลายวิธีที่สามารถทำได้ นั่นคือ @vanadium point ฉันเชื่อ; บอกเราว่าคุณต้องการบรรลุอะไร และคุณอาจได้ผลลัพธ์มากมายที่บรรลุตามที่คุณต้องการ (`find -name '*paper*'` จะพบชื่อไฟล์/โฟลเดอร์ที่มีคำว่า paper (ทุกที่)... รวมทั้งการมองหา ในไดเร็กทอรีย่อยด้านล่าง $PWD ปัจจุบันของคุณ ... การเพิ่ม `-delete` เข้าไป ซึ่งจะทำให้ไฟล์/โฟลเดอร์เหล่านั้นถูกลบ
Score:2
ธง hr

ท่อ (|) เชื่อมต่อสตรีมเอาต์พุตมาตรฐานของกระบวนการเข้ากับสตรีมอินพุตมาตรฐานของกระบวนการอื่น คุณไม่สามารถใช้สิ่งนั้นเพื่อส่งรายชื่อไฟล์ไปให้ rm โดยตรงเพราะ rm ไม่อ่านชื่อไฟล์จากอินพุตมาตรฐาน

คุณ สามารถ ใช้ xargs โปรแกรมสำหรับอ่านรายชื่อ ของมัน อินพุตมาตรฐาน และ "รวม" ชื่อไฟล์สำหรับ rm:

ls -A | grep abcdef | xargs rm

แต่อย่ามีปัญหาทุกประเภทกับแนวทางนี้ - โดยเฉพาะอย่างยิ่ง เกรป ประมวลผลอินพุตทีละบรรทัดในขณะที่ xargs แยกอินพุตบนช่องว่างตามค่าเริ่มต้น คุณสามารถทำให้ดีขึ้นได้โดยใช้สิ่งที่ชอบ

shopt -s dotglob # จำลอง ls -A ไฟล์ที่ซ่อนอยู่ "เกือบทั้งหมด"
พิมพ์f '%s\0' * | grep -z abcdef | xargs -0 rm

ซึ่งใช้อักขระ null ASCII เพื่อแยกชื่อไฟล์อย่างชัดเจน วิธีการที่นิยมโดยทั่วไปคือการใช้ หา สั่งการ:

หา . -maxความลึก 1 -ชื่อ '*abcdef*' # -ลบ

(ฉันออกจาก -ลบ แสดงความคิดเห็นสำหรับตอนนี้ - ตรวจสอบให้แน่ใจอย่างแน่นอน หาใช้ไฟล์ที่ถูกต้องก่อนที่จะยกเลิกการแสดงความคิดเห็น เนื่องจากไม่มีการดำเนินการ "เลิกทำ")

โปรดทราบว่า หา เรียกซ้ำในไดเร็กทอรีย่อยโดยค่าเริ่มต้น - หากคุณต้องการเทียบเท่า ls -R จากนั้นถอด -ความลึกสูงสุด 1. คุณสามารถเพิ่ม -ประเภทฉ เพื่อค้นหาและลบไฟล์เท่านั้น (ละเว้นไดเร็กทอรี)

โปรดทราบว่า ค้นหาชื่อ ใช้รูปแบบ shell glob แทนนิพจน์ทั่วไปที่ใช้โดย เกรป (นอกจากนี้ยังมี -regex ตรงกับเพรดิเคต แต่ดูเหมือนจะไม่จำเป็นที่นี่)

ดูสิ่งนี้ด้วย ทำไม ไม่ แยกวิเคราะห์ (และจะทำอย่างไรแทน)?

โพสต์คำตอบ

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