อะไรคือสิ่งที่เทียบเท่า Linux ของ DOS“ dir / s / b ชื่อไฟล์”?


17

รายการไฟล์ / dirs ทั้งหมดในหรือด้านล่างไดเรกทอรีปัจจุบันที่ตรงกับ 'ชื่อไฟล์'

คำตอบ:


28

เทียบเท่าโดยตรงคือ

find . -iname <filename>

ซึ่งจะแสดงรายการไฟล์และไดเรกทอรีทั้งหมดที่เรียกว่า<filename>ในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยใด ๆ โดยไม่สนใจขนาดตัวพิมพ์

หากเวอร์ชันการค้นหาของคุณไม่รองรับ-inameคุณสามารถใช้-nameแทน โปรดทราบว่าแตกต่าง-inameกัน-nameเป็นกรณี ๆ ไป

หากคุณต้องการแสดงรายการไฟล์ที่เรียกว่า<filename>และไม่ใช่ไดเรกทอรีเท่านั้นให้เพิ่ม-type f

find . -iname <filename> -type f

หากคุณต้องการใช้ไวด์การ์ดคุณต้องใส่เครื่องหมายคำพูดล้อมรอบมันเช่น

find . -iname "*.txt" -type f

มิฉะนั้นเปลือกจะขยายออก

ตามที่คนอื่น ๆ ชี้คุณสามารถทำได้:

find . | grep "\.txt$"

grep จะพิมพ์บรรทัดตามนิพจน์ทั่วไปซึ่งมีประสิทธิภาพมากกว่า wildcard แต่มีไวยากรณ์แตกต่างกัน

ดูman findและman grepสำหรับรายละเอียดเพิ่มเติม


3
หาก<filename>มีสัญลักษณ์แทนการใช้คำพูดที่อยู่รอบ ๆ find . -name '*.txt'เช่น
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

@Gilles อัปเดตคำตอบของฉันเพื่อบอกว่าขอบคุณ
Mikel

2
ใช้<filename>เป็นเครื่องหมายสำหรับ userinput เป็นนิสัยที่ไม่ดีในสภาพแวดล้อมบรรทัดคำสั่งที่< and >ส่วนใหญ่มีความหมายเฉพาะ ฉันขอแนะนำให้ใช้filenameบางทีอาจเป็นชื่อไฟล์เพื่อเน้น คนส่วนใหญ่จะเข้าใจและผู้ที่จะไม่ทำอาจเป็นอันตรายเมื่อไม่เข้าใจว่าพวกเขาไม่ควรจะเข้าสู่ระบบน้อยกว่าหรือมากกว่า - มากกว่า
ผู้ใช้ไม่ทราบ

2
<filename>เป็นข้อตกลงในเอกสาร UNIX จำนวนมากดังนั้นฉันคิดว่ามันมีประโยชน์สำหรับผู้คนที่จะรับรู้ แต่ฉันเห็นด้วยว่าFILENAMEอาจเข้าใจง่ายกว่า
มิเคล

1
find -iname <filename>ดีกว่าเนื่องจากไม่คำนึงถึงขนาดตัวพิมพ์เช่น DOS
Agnel Kurian

8

เปลือกบางใบอนุญาตls **/filenameซึ่งค่อนข้างสะดวก


1
จุดดี. ในรุ่นล่าสุดของการทุบตีการทำงานเทียบเท่ากับshopt -s globstar; echo **/filename find . -name "filename"มันยังใช้งานได้ใน zsh
มิเคล

ls ** / ชื่อไฟล์นี้ใช้ได้ แต่ดูเหมือนจะไม่มากไปกว่าระดับไดเรกทอรีเดียว
Sopalajo de Arrierez

@ sopalajo-de-arrierez ถ้าคุณทำshopt -s globstarมันอาจจะเหมาะกับคุณ การวนซ้ำแบบซ้ำเป็นคุณสมบัติที่มีเฉพาะในเปลือกหอยบางตัวและบางครั้งก็ไม่ได้เปิดตามค่าเริ่มต้น
Shawn J. Goff

Ops ... ผมเข้าใจตอนนี้ @ ShawnJ.Goff ที่: คำสั่งช่วยให้ตัวเลือกshopt globstar onตอนนี้มันทำงานเหมือนจับใจ ขอบคุณมาก.
Sopalajo de Arrierez

4

คุณสามารถทำได้ด้วย

find . | egrep filename

1
คุณสามารถทำได้ด้วยfind . -regextype posix-egrep -regex '.*filename.*'(ฉันไม่รู้ว่าegrepส่วนนั้นสำคัญหรือไม่ แต่คุณใช้egrepในคำตอบของคุณดังนั้นฉันจึงรวมมันไว้ด้วย)
Michael Mrozek

คุณสามารถ แต่ grep แตกต่างจากคำสั่ง DOS เทียบเท่า grepใช้นิพจน์ทั่วไปในขณะที่คำสั่ง DOS ใช้เชลล์สัญลักษณ์แทน
มิเคล

1
ลองคิดดูสิว่า globs ของเชลล์นั้นแตกต่างจาก wildcard ของ DOS ตัวอย่างเช่นfind . -name "*.*"จะไม่ทำสิ่งที่คุณคาดหวังจากพื้นหลัง DOS Globs อยู่ใกล้พอที่จะเป็นที่รู้จักแม้ว่าในขณะที่ regexes เป็นสัตว์ร้ายใหม่ทั้งหมด
Jander

สิ่งที่จะ*.*.*ทำในสมัยที่ทันสมัยเช่น windows cmd? เกี่ยวกับ*.*.*.*อะไร
ctrl-alt-delor

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