คำสั่ง rm และการแสดงออกปกติผ่านเปลือก Linux BASH


1

ฉันพยายามใช้นิพจน์ทั่วไปเพื่อลบชุดของไฟล์ออก แต่เชลล์ bash จะส่งคืนข้อความ

rm: cannot remove `[0-99]+ -': No such file or directory
rm: cannot remove `[a-zA-Z': No such file or directory
rm: cannot remove `]+.[a-z]+': No such file or directory

คำสั่งคือ [0-99]+\ - [a-zA-Z ]+\.[a-z]+

คำถาม

  1. ฉันสามารถใช้นิพจน์ทั่วไปได้หรือไม่
  2. ถ้าใช่ฉันจะใช้พวกเขาที่มีคำสั่งเช่นrm, mkdirฯลฯ

คำตอบ:


2

Bash (และหอย Unix อื่น ๆ ) ใช้wildcardsไม่ใช่นิพจน์ปกติเต็มและช่วงไม่สามารถมีช่องว่างได้


ฉันสามารถใช้อะไรได้บ้างพร้อมการสนับสนุนอย่างเต็มที่สำหรับนิพจน์ทั่วไป
PeanutsMonkey

คุณจะต้องใช้การค้นหาถ้าคุณต้องการการสนับสนุน regex แบบเต็ม แต่ระวังให้ดีว่าการค้นหารองรับหลายรูปแบบใน regex ค่าเริ่มต้นคือสไตล์ emacs หากคุณต้องการหนึ่งในอื่น ๆ เช่น posix-awk หรือ posix-egrep คุณจะต้องระบุ -regextype คุณสามารถวางเอาต์พุตของ find back ลงบนบรรทัดรับคำสั่งเป็นอาร์กิวเมนต์เพื่อ rm โดยใช้การ`...`ทดแทนคำสั่ง (แต่ไม่ใช่ถ้าชื่อไฟล์มีช่องว่าง)
Nicole Hamilton

ลิงก์ใช้งานไม่ได้
ลูอิส

ขอบคุณสำหรับการชี้ให้เห็นหลุยส์ ฉันได้แก้ไขลิงก์ตายแล้วแทนที่ด้วยลิงก์ไปยังสแน็ปช็อตที่ archive.org
Nicole Hamilton

1

ใช้นิพจน์เรจิคัลในfindคำสั่งเช่น

find . -type f -regex regEXP

และใช้ควบคู่กับrmวิธีต่อไปนี้

find . -type f -regex regEXP -exec rm -rf {} \;


3
ระวัง: -regexpตรงกับเส้นทางทั้งหมด (แตกต่างจาก-name) รวมถึงไดเรกทอรีหลัก ไม่ใช่ปัญหาของรูปแบบเหล่านี้ แต่เป็นสิ่งที่ต้องคำนึงถึง
Daniel Beck

ใช่คุณพูดถูก แต่คำสั่งนี้ใช้ได้
DonCallisto

@DonCallisto: rfคุณพลาดยัติภังค์บนที่ หาก GNU find พร้อมใช้งานมันจะเร็วกว่าที่จะลบด้วย-deleteคำสั่ง
Thor

@Daniel Beck - คุณหมายถึงwhole pathอะไร?
PeanutsMonkey

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