ลบไฟล์“ .DS_Store” ที่น่ารำคาญเหล่านั้น


13

หากคุณใช้ OS X คุณอาจคุ้นเคยกับไฟล์ ".DS_Store" ที่น่าอับอายซึ่งถูกสร้างขึ้นอันเป็นผลมาจากการใช้ Finder

ความท้าทายคือการเขียนโค้ดที่จะผ่านทั้งระบบไฟล์และลบไฟล์ใด ๆ ที่ชื่อว่า ".DS_Store"

Classic code golf - รหัสที่สั้นที่สุดชนะ


ชี้แจง:

  • รหัสไม่จำเป็นต้องลบไฟล์. DS_Store ใด ๆ ที่ต้องมี superuser สมมติว่าไม่มีไฟล์ดังกล่าวอยู่

  • รหัสควรลบเฉพาะไฟล์. DS_Store ที่เกี่ยวข้องเท่านั้น


3
รหัสจำเป็นต้องลบไฟล์. DS_Store ที่ต้องใช้ superuser (ฉันต้องเรียกใช้ sudo) หรือไม่?
Kaya

1
@Kaya คำถามที่ดี: ไม่จำเป็นต้องลบไฟล์ดังกล่าว
arshajii

27
จะเป็นการดีไหมถ้าจะลบไฟล์ที่ไม่มีชื่อ.DS_Storeด้วย؟
Joey Adams

1
@JohannesKuhn การแก้ไขล่าสุดควรจะชัดเจนในตัวเองฉันจะถือว่า ฉันเพิ่มมันเพื่อความสมบูรณ์ แต่ฉันขอขอบคุณคำตอบที่ฉลาด แต่กระนั้น!
arshajii

1
@Joey - ส่งคำถามไปยังโดเมนทหาร - ตัวอย่างเช่นอืม…ทหารของสหรัฐอเมริกาสุ่ม ^^ และแทนที่ "ไฟล์ชื่อ" .DS_Store "" ด้วย "person to kill" และคุณจะเห็นว่าข้อกำหนด "เท่านั้น" นั้นยังห่างไกลจากความชัดเจน
Nicolas Barbulesco

คำตอบ:



12

Bash *, 40 30

find / -name .DS_Store -delete

find / -name .DS_Store -exec rm -f {} \;

สิ่งนี้ควรจัดการกับมัน (ไม่เล่นกอล์ฟไม่มากไปที่อย่างช้า ๆ อย่างน่าอัศจรรย์) Bash ดูเหมือนถูกเพราะเราไม่ต้องจัดการกับเรื่องไร้สาระ "ระบบการนำเข้า" หากคุณต้องการให้มีการดำเนินการในสภาพแวดล้อมใด ๆ เพิ่ม 4 ตัวอักษรสำหรับbashและ 1 สำหรับตัวดึงข้อมูลบรรทัด

* เปลือกหอยใด ๆ ที่ฉันเดาไม่สามารถออกจากนิสัยได้ถ้าสมมติว่า bourne อีกครั้งเป็นเพียงเปลือกหอยเดียว


1
Bash เป็นเครื่องมือที่เหมาะสมสำหรับสิ่งนั้น
Johannes Kuhn

1
สิ่งที่ชนิดของfindOS X มี? ด้วย GNU คือแม้สั้น:find find / -name .DS_Store -delete
จัดการ

1
ขึ้นอยู่กับ“รายการอาร์กิวเมนต์ยาวเกินไป” ข้อผิดพลาดและต้องใช้ทั้งbash4 หรือรุ่นใหม่ที่มีglobstarตัวเลือกเปลือกเปิดหรือ:zsh rm /**/.DS_Store
จัดการ

1
คุณไม่ได้ทำอะไรที่เฉพาะเจาะจงเพื่อทุบตี
Peter Taylor

10
มันลบ.DS_Storeไดเรกทอรีของฉันที่ฉันมีสิ่งที่สำคัญ
Konrad Borowski

9

Ruby: 38 33 ตัวอักษร

File.delete *Dir['/**/.DS_Store']

2
Dir[...]เป็นทางลัดสำหรับDir.glob(...)ซึ่งจะช่วยให้คุณประหยัด 5 ตัวอักษร
Patrick Oscity

3
โอ๊ะ! ฉันรู้ว่ามีวิธีที่สั้นกว่า แต่ฉันค้นหาKernelด้วย ขอบคุณ @padde
จัดการ


0

เชลล์, 25

locate .DS_Store|xargs rm

ต้องใช้locateฐานข้อมูลการทำงาน


3
ยังต้องใช้พา ธ ที่ไม่มีอักขระช่องว่าง
จัดการ


0

CMD, 17

del/s "/.DS_Store

ตรงไปตรงมาสวย

/sจำเป็นสำหรับการค้นหาภายในไดเรกทอรีย่อยด้วย
"ถูกใช้เพื่อหลบหนี/ถ่านซึ่งมิฉะนั้นจะถูกตีความว่าเป็นอาร์กิวเมนต์ (ไม่ถูกต้อง)


-1

ค้นหา, 38

findโซลูชันprevius นั้นผิดธรรมดา: หมายถึงการลบทุกอย่างที่มีชื่อ.DS_Storeรวมถึงไดเรกทอรีลิงก์ไฟล์พิเศษ ฯลฯ

แต่:

find / -type f -name .DS_Store -delete

findมันเป็นวิธีการแก้ปัญหาน้อยที่สุดโดยใช้

DISCLAMER : ฉันแนะนำอย่างมากกับการใช้โซลูชันนี้ในกล่อง * ระวัง: การพยายามลบสิ่งที่เกิดซ้ำ ๆ ซ้ำ ๆ/นั้นเป็นความคิดที่แย่มาก คุณถูกเตือน

แก้ไข :

หากความแตกต่างระหว่างไฟล์ไดเรกทอรีลิงก์ (ฮาร์ดและสัญลักษณ์) ชื่อไปป์ซ็อกเก็ตไฟล์พิเศษระบบไฟล์หลอกไม่ชัดเจนสำหรับคุณฉันขอแนะนำ google บางคำที่ไม่รู้จักนี้ คุณจะประหลาดใจฉลาดและมีโอกาสน้อยกว่าที่จะเกิดข้อผิดพลาด (catstrofic)

EDIT2 : ยิ่งมีความเกี่ยวข้องยิ่งขึ้น: OP เขียนว่า "โค้ดควรลบไฟล์. DS_Store ที่เกี่ยวข้องเท่านั้นและไม่มีอะไรอื่นอีก" : ดังนั้นถ้าใครบางคนสนใจที่จะอ่านข้อกำหนดที่น่าเบื่อโซลูชั่นทั้งหมดที่ลบมากกว่าไฟล์นี้จะตลกตลกฉลาดและอื่น ๆ แต่ที่ไม่ถูกต้อง


findวิธีแก้ไขก่อนหน้านี้ถูกต้อง คำถามบอกว่า“ ลบไฟล์ใด ๆ ที่ชื่อ ".DS_Store" " ดังนั้นจึงไม่มีความต้องการพิเศษตามประเภทของไฟล์
จัดการ

@ manatwork: ไร้สาระ: ไฟล์เป็นสิ่งที่แตกต่างจากไดเรกทอรี ตามแนวบิดของคุณทางออกที่ดีที่สุดยังคงเป็น RM -rf /
DavAlPi

2
โอ้คุณไม่ได้ google: en.wikipedia.org/wiki/Everything_is_a_file
Johannes Kuhn

3
โอ้และสิ่งอื่น ๆ : ในการเขียนโค้ดเป้าหมายคือเพื่อให้ได้ทางออกที่สั้นที่สุดดังนั้นหากคุณสามารถบันทึกสองสามตัวอักษรได้โดยการทำตามข้อกำหนดที่คุณโปรดปรานเอาล่ะ คุณสามารถบันทึกได้ 8 ตัวอักษรโดยทำทุกอย่างเหมือนไฟล์เหมือนยูนิกซ์ PS: ความประหลาดใจอยู่ที่ไหน ความจริงที่ว่าบางคนปฏิเสธการปกครองพื้นฐานของ UNIX?
โยฮันน์คุห์น

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