Score:-2

ลบไฟล์บางไฟล์ยกเว้นไฟล์อื่น

ธง in

ฉันพบคำแนะนำมากมายเกี่ยวกับวิธีการลบไฟล์ที่มีข้อยกเว้น อย่างไรก็ตาม กรณีนี้แตกต่างกันเล็กน้อย สมมติว่าฉันมีไฟล์ 6 ไฟล์ดังนี้ในไฟล์ของฉัน อูบุนตู 18.04:

text_1.json
text_2.json
video_1.mp4
video_2.mp4
video_1_notouch.mp4
video_2_notouch.mp4

คำสั่งควรลบเท่านั้น video_1.mp4 และ video_2.mp4 ไฟล์ในขณะที่ปล่อยไฟล์อื่นๆ ไว้ตามที่เป็นอยู่

ฉันเหนื่อย rm -v !(*.json|*_notouch.mp4) ตามที่แนะนำ ที่นี่แต่มันลบไฟล์ทั้งหมด 6 ไฟล์

Someone avatar
my flag
โปรด [แก้ไข] คำถามของคุณเพื่อรวม 0 รุ่น Ubuntu ของคุณ 1. ปัญหาของคุณคืออะไร 2. ตอนนี้คุณต้องการอะไรหลังจากลบไฟล์เหล่านั้นแล้ว
Someone avatar
my flag
คุณหมายถึงอะไรโดยลบทุกอย่างออก?
guiverc avatar
cn flag
[Ubuntu 16.04 LTS ถึงจุดสิ้นสุดของการรองรับ *มาตรฐาน* แล้ว](https://fridge.ubuntu.com/2021/03/13/extended-security-maintenance-for-ubuntu-16-04-xenial-xerus -begins-april-30-2021/) ดังนั้นตอนนี้จึงไม่อยู่ในหัวข้อที่นี่ เว้นแต่คำถามของคุณจะเจาะจงเพื่อช่วยให้คุณย้ายไปยัง Ubuntu รุ่นที่รองรับ รองรับ Ubuntu 16.04 ESM แต่ไม่อยู่ในหัวข้อนี้ โปรดดู https://askubuntu.com/help/on-topic ดูเพิ่มเติมที่ https://ubuntu.com/blog/ubuntu-16-04-lts-transitions- เพื่อขยายการรักษาความปลอดภัยการบำรุงรักษา esm
bit_scientist avatar
in flag
อ๊ะ 18.04 ไม่ใช่ 16.04 ขออภัยพิมพ์ผิด
bac0n avatar
cn flag
`shopt extglob` พูดว่าอะไร
bit_scientist avatar
in flag
@bac0n เมื่อฉันใช้คำสั่ง ตอนนี้มันปิดอยู่
bac0n avatar
cn flag
ฉันคิดว่า shopt extglob ถูกกำหนดโดย bash-completion แต่คุณสามารถต่อท้ายด้วย `~/.bashrc` ได้ด้วย ซึ่งมันไม่ได้สืบทอดมา ดังนั้นคุณจะต้องตั้งค่าใหม่เมื่อคุณตั้งใจจะเรียกใช้เชลล์ใหม่ เช่น `bash -c 'shopt extglob'` อาจเขียนได้ *bash -O extglob -c 'shopt extglob'*
user535733 avatar
cn flag
`rm` เป็นแบบถาวรและไม่สามารถยกเลิกได้ หากคุณมีความเสี่ยงเนื่องจากไฟล์ที่จะเก็บและไฟล์ที่จะลบผสมกัน ให้ใช้การควบคุมการจัดการความเสี่ยงขั้นพื้นฐาน: แยกขั้นตอน (ใช้ `find`) หรือแยกไฟล์ออกเป็น tempdirs หรือใช้เวลาในการไปทีละไฟล์ อ่านผลลัพธ์ของคุณอย่างระมัดระวังและทดสอบสิ่งที่คุณค้นพบก่อนที่จะลบ มันจะช่วยให้คุณประหยัดน้ำตา
Score:7
ธง cn

จะดีกว่าและง่ายกว่าที่จะใช้ หา สั่งการ:

หา . -พิมพ์ f -name "*.mp4" ! -ชื่อ "*_notouch.mp4" -exec rm -v {} \;

คำสั่งนี้จะจับคู่กับชื่อไฟล์ที่ลงท้ายด้วย .mp4แต่ไม่ใช่กับ _notouch.mp4 และจะเรียกใช้คำสั่งที่ได้รับหลังจากนั้น -ผู้บริหาร.

ก่อนการดำเนินการทำลายล้างดังกล่าว ควรเสริมหรือแทนที่เสมอ rm สั่งการด้วย เสียงสะท้อน และตรวจสอบว่าคุณได้รับคำสั่งที่คุณคาดหวัง:

หา . -พิมพ์ f -name "*.mp4" ! -ชื่อ "*_notouch.mp4" -exec echo rm -v {} \;

[แก้ไข] ตามที่กล่าวไว้ในความคิดเห็น; ในกรณีของคุณ คุณสามารถใช้ พิมพ์ - ลบ แทนที่ -exec echo rm -v {} \; (ซึ่งจะมีประสิทธิภาพมากขึ้นหากคุณมีไฟล์หลายล้านไฟล์) และในการแสดงรายการไฟล์ที่จะได้รับผลกระทบ (ก่อนเรียกใช้คำสั่งทำลาย) คุณสามารถเรียกใช้:

หา . -พิมพ์ f -name "*.mp4" ! -ชื่อ "*_notouch.mp4" (-พิมพ์ เป็นทางเลือก)

นอกจากนี้หากคุณ อย่า ต้องการให้มีผลกับไดเร็กทอรีย่อย คุณสามารถใช้ -ความลึกสูงสุด 1 ตัวเลือกเช่นนี้:

หา . -maxความลึก 1 -ประเภท f -name "*.mp4" ! -ชื่อ "*_notouch.mp4".

bac0n avatar
cn flag
ควรใช้ `+` แทน ```\;```
bac0n avatar
cn flag
หรือ `ค้นหา -type f -name '...' ... -print -delete`
Liso avatar
sd flag
+1 เคล็ดลับเรียบร้อย !
user535733 avatar
cn flag
+1 ที่สละเวลาอธิบายวิธีที่ปลอดภัยในการทำเช่นนี้

โพสต์คำตอบ

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