ต้องการสคริปต์เพื่อลบไฟล์ temp ทั้งหมดที่ขึ้นต้นด้วย ~ $


1

การสแกนล่าสุดในเซิร์ฟเวอร์ไฟล์ของเราสำหรับไฟล์ temp ที่มี~ $ต่อท้ายชื่อเริ่มต้นสร้างผลลัพธ์เกือบ 1,000 รายการ

วันที่ "แก้ไขครั้งล่าสุด" ของไฟล์เหล่านี้กลับไปเป็นปี 2003 (โดยทั่วไปแล้วไฟล์เหล่านี้ซ้ำซ้อนทั้งหมดในตอนนี้และสามารถลบได้อย่างปลอดภัย)

ฉันต้องการสคริปต์ที่จะระบุและลบไฟล์ใด ๆ ที่ขึ้นต้นด้วย "~ $" ซึ่งฉันสามารถกำหนดเวลาให้ทำงานสัปดาห์ละครั้งบนเซิร์ฟเวอร์เพื่อล้างไฟล์ temp เหล่านี้โดยอัตโนมัติเป็นประจำ

คำตอบ:


2

สำหรับไดเรกทอรีเฉพาะสิ่งนี้จะลบไฟล์ทั้งหมดที่มีชื่อขึ้นต้นด้วย ~ $ แบบเรียกซ้ำ:

find /path/to/directory -type f -name '~$*' -exec rm '{}' \;

หากต้องการ จำกัด เฉพาะไดเรกทอรีที่ระบุเท่านั้นและไม่อยู่ภายใต้ไดเรกทอรีย่อยให้ใช้ maxdepth:

find /path/to/directory -maxdepth 1 -type f -name '~$*' -exec rm '{}' \;

เปลี่ยนอาร์กิวเมนต์ integral เป็น-maxdepthขึ้นอยู่กับระดับของไดเร็กทอรีที่ต้องการเพื่อค้นหาไฟล์

อีกวิธีที่ง่ายกว่าคือการใช้ globs แต่ไม่ใช่ความคิดที่ดีเพราะจะพยายามแตะไดเรกทอรีที่ตรงกับรูปแบบ มันยังไม่ลบ แต่คุณต้องใส่ใจกับข้อความแสดงข้อผิดพลาด คุณสามารถใช้-fตัวเลือกหรือส่งออกข้อผิดพลาดไป/dev/nullแต่ก็สกปรกสำหรับวิธีการ:

rm '/path/to/directory/~$'*

5
มันจะค่อนข้างมีประสิทธิภาพมากขึ้นในการใช้+- ซึ่งหมายความว่า{}ขยายเข้าไปในรายการของไฟล์ ( findฉลาดพอที่จะทำให้แน่ใจว่ามันอยู่ต่ำกว่าขีด จำกัด ของเชลล์) - มากกว่า\;ซึ่งหมายความว่า{}ขยายเป็นไฟล์เดียว เพราะมันหมายถึงคุณกำลังทำงานrmหนึ่งครั้งสำหรับทุกไฟล์ที่findพบเมื่อคุณอาจจำเป็นต้องใช้เพียงครั้งเดียว findคุณสามารถใช้-deleteตัวเลือกและหลีกเลี่ยงการเรียกคำสั่งภายนอกทั้งหมดขึ้นอยู่กับรุ่นของคุณ
evilsoup

ขอบคุณสำหรับข้อมูลพิเศษ ข้อได้เปรียบในทางปฏิบัติของการใช้ "+" กับการใช้ "\;" คืออะไร และสคริปต์ทั้งหมดจะเป็นอย่างไร ฉันควรจะแทนที่ "\;" สำหรับ "+"?
Austin '' Danger '' พลัง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.