คำสั่ง Mac find“ find”: เครื่องหมายทับสองครั้งในผลลัพธ์ผลลัพธ์หมายความว่าอะไร


9

ฉันใช้คำสั่งค้นหาเพื่อค้นหาในโครงสร้างไดเรกทอรีขนาดใหญ่และซ้อนกัน

ในผลลัพธ์ผลลัพธ์บางครั้งมีเครื่องหมายสแลช (//) รวมอยู่ด้วย

ตัวอย่าง (หลังจาก "ดาวน์โหลด"):

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf

ฉันแรกคิดว่ามันจะทำเครื่องหมายไดเรกทอรีการทำงานปัจจุบัน แต่นั่นไม่ใช่กรณี

ทับสองครั้งนี้มีความหมายอะไร?

ฉันมักจะคัดลอกผลลัพธ์ไปยังคลิปบอร์ดเปลี่ยนเป็นเครื่องมือค้นหา จากนั้น "shift" + "command" + "g" และวางพา ธ (จนกว่าไฟล์) ลงในช่อง เพื่อให้ไดเรกทอรีที่มีการเปิดอยู่

ทำงานได้ดี แต่ทับสองครั้งฉันต้องลบด้วยตนเอง

ดังนั้น: ฉันจะหลีกเลี่ยงได้อย่างไร


2
โปรดทราบว่าคุณไม่ต้องลบเครื่องหมายทับสองครั้ง เครื่องหมายทับสองครั้งเป็นพิเศษเฉพาะที่จุดเริ่มต้นของเส้นทางและเฉพาะถ้ามันเป็นสองทับ เครื่องหมายทับหลายอันที่อยู่ตรงกลางหรือท้ายหรือจำนวนทับใด ๆ ที่เกินกว่าสองจุดเริ่มต้นเทียบเท่ากับหนึ่งทับ รับประกันโดยข้อกำหนด POSIX / SUS
Jörg W Mittag

คำตอบ:


17

findค่อนข้างแท้จริง เมื่อคุณบอกให้ค้นหาภายใน "~ / Downloads /" มันจะใช้คำนั้น (รวมถึงเครื่องหมายสแลชต่อท้าย) เป็นส่วนนำหน้าสำหรับสิ่งที่พบ เนื่องจากมีเครื่องหมายทับที่ไม่จำเป็นและไม่เกี่ยวข้องในตอนท้ายของเส้นทางที่คุณให้คุณจึงปิดท้ายด้วยเครื่องหมายทับที่ไม่จำเป็นและไม่เกี่ยวข้องในผลลัพธ์

วิธีแก้ไข: ลบส่วนท้าย "/" ออกจากสารบบค้นหา:

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf
#> find ~/Downloads -iregex ".*some.*"
/Users/michael/Downloads/subDirectory/some_file.pdf

4

ทับสองครั้งนี้มีความหมายอะไร?

หมายถึงคุณกำลังใช้การค้นหา BSD เก่าที่แปลก

ฉันจะหลีกเลี่ยงได้อย่างไร

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

ฉันขอแนะนำให้ทำอย่างใดอย่างหนึ่งต่อไปนี้:

a) ทำ wrapper เพื่อค้นหาว่าท่อที่จะทำให้: sed 's @ // @ / @'

b) ติดตั้ง findutils ของ GNU ด้วย 'ชงติดตั้ง findutils' จากนั้นใช้ 'gfind' โดยตรงนามแฝง 'find' เป็น 'gfind' หรือเพิ่ม / usr / local / opt / findutils / libexec / gnubin ไปยังเส้นทางของคุณ (ซึ่งเพิ่ม GNU findutils '' find ',' updatedb ', &' xargs ')

c) สลับไปใช้ GNU / Linux OS ที่เหมาะสมซึ่งไม่เคยมีปัญหานี้ (& อีกพัน) ในตอนแรก : p


1
เพียงเพิ่มset mark-directories offของคุณ inputrcและคุณก็พร้อมที่จะไป จากหนึ่งในคน BSD เก่า
fd0

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