คำถามติดแท็ก find

สำหรับคำถามที่เกี่ยวข้องกับการค้นหายูทิลิตีบรรทัดคำสั่งเพื่อค้นหาไฟล์ในลำดับชั้นไดเรกทอรี ใช้แท็กนี้สำหรับคำถามเกี่ยวกับการค้นหาตัวเองหรือคำถามเกี่ยวกับปัญหาที่เกิดขึ้นจากการใช้ยูทิลิตี้ค้นหาบรรทัดคำสั่ง

2
ใช้คำสั่ง find เพื่อแปลงไฟล์ markdown เป็น html
.mdให้คิดว่าฉันมีไฟล์บนฮาร์ดดิสก์ของฉันที่มีนามสกุลเป็น ฉันต้องการที่จะแปลงไฟล์เหล่านั้นทั้งหมดจะ.htmlผ่านfindและ-execตัวเลือก คำสั่งในการแปลงไฟล์ markdown เป็น html คือ markdown readme.md > readme.html ฉันกำลังพยายามใช้สิ่งที่ชอบ: find / -name "*.md" -type f -exec markdown {} > {}.html \; แน่นอนข้างต้นไม่ทำงาน ดังนั้นฉันจะใช้วิธีนี้ได้อย่างไรfindและexec?
17 bash  find 


6
การค้นหาแบบคำนึงถึงขนาดตัวพิมพ์ของชื่อไฟล์ซ้ำกัน
ฉันมีวิธีการค้นหาไฟล์ทั้งหมดในไดเรกทอรีที่มีชื่อไฟล์ซ้ำกันหรือไม่โดยไม่คำนึงถึงตัวอักษร (ตัวพิมพ์ใหญ่และ / หรือตัวพิมพ์เล็ก)

2
ค้นหาไฟล์ที่ใหม่กว่า 15 วินาที แต่เก่ากว่า 2 วินาที
ฉันต้องการค้นหาไฟล์ที่ใหม่กว่า 15 วินาที แต่เก่ากว่า 2 วินาที นี่คือสคริปต์ที่ฉันใช้ในขณะนี้ซึ่งคว้าไฟล์ใหม่กว่า 15 วินาที: find /my/directory -name '*.jpg' -not -newermt '-15 seconds' ความช่วยเหลือใด ๆ ที่ชื่นชมอย่างมาก
17 bash  find 

5
คัดลอกและเปลี่ยนชื่อไฟล์ที่พบในฟังก์ชั่น "ค้นหา" Linux อย่างไร
ฉันมีชื่อโฟลเดอร์/home/user/tempsซึ่งมี 487 โฟลเดอร์ ในแต่ละโฟลเดอร์ฉันมีไฟล์ชื่อ thumb.png ฉันต้องการคัดลอกไฟล์ทั้งหมดที่ชื่อว่า thumb.png ไปยังโฟลเดอร์แยกต่างหากและเปลี่ยนชื่อไฟล์ตามโฟลเดอร์ที่มาจาก
17 shell  find  rename 

4
find-command สำหรับไดเร็กทอรีย่อยที่แน่นอน
สมมติว่าผมมีไดเรกทอรีdirที่มีสามไดเรกทอรีย่อย..dir1 dir3และข้างในฉันมีไฟล์มากมายและไดเรกทอรีย่อยอื่น ๆ ฉันต้องการค้นหาไฟล์ข้างในพูดด้วย*.cจุดจบ แต่ฉันต้องการค้นหาเฉพาะในไดเรกทอรีย่อย "dir / dir2" และไดเรกทอรีย่อยทั้งหมด ฉันจะกำหนดสิ่งนั้นได้อย่างไร สมมติว่าdir/ฉันมีฉัน: find . -name "*.c" เพื่อค้นหาในทุกไดเรกทอรี ฉันจะ จำกัด เฉพาะได้dir2อย่างไร
17 linux  bash  shell  find 

4
ค้นหาไฟล์ที่มีสตริงในชื่อไฟล์และสตริงอื่นภายในไฟล์หรือไม่
ฉันต้องการ (เรียกซ้ำ) ค้นหาไฟล์ทั้งหมดที่มี "ABC" ในชื่อไฟล์ซึ่งมี "XYZ" ในไฟล์ด้วย ฉันเหนื่อย: find . -name "*ABC*" | grep -R 'XYZ' แต่มันไม่ได้ให้ผลลัพธ์ที่ถูกต้อง
17 grep  find 

4
จะแทนที่ช่องว่างในชื่อไฟล์ทั้งหมดด้วยเครื่องหมายขีดล่างใน Linux โดยใช้เชลล์สคริปต์ได้อย่างไร
ฉันลองต่อไปนี้เชลล์สคริปต์ซึ่งควรแทนที่ช่องว่างจากชื่อไฟล์ xml ทั้งหมด for xml_file in $(find $1 -name "* .xml" -type f); do echo "removing spaces from XML file:" $xml_file mv "$xml_file" "${xml_file// /_}"; done สมมติว่าฉันมีไฟล์ xml ที่มีชื่อxy z.xmlจากนั้นจะให้: removing spaces from XML file: /home/krishna/test/xy mv: cannot stat `/home/krishna/test/xy': No such file or directory removing spaces from XML file: …

4
ฉันจะค้นหาแบบกว้างโดยใช้ 'find' ได้อย่างไร
-depthหลักในการfindทำให้เกิดการดำเนินการค้นหาความลึกแรก อย่างไรก็ตามลำดับเริ่มต้นไม่ใช่การค้นหาแบบกว้าง ลำดับเริ่มต้นสามารถอธิบายได้อย่างไม่เป็นทางการว่าเป็น "การสำรวจเส้นทางแรกที่มีความลึกที่จัดการกับโหนดเมื่อพบครั้งแรกมากกว่าจะทำเช่นนั้นในระหว่างการย้อนกลับ" ฉันมีความต้องการที่แท้จริงสำหรับการค้นหาแบบกว้างครั้งแรก ฉันจะfindประพฤติตนในลักษณะนี้ได้อย่างไร สำหรับภาพประกอบด้วยการตั้งค่าต่อไปนี้: $ mkdir -p alpha/{bravo,charlie,delta} $ touch alpha/charlie/{alpha,beta,gamma,phi} find มีพฤติกรรมเริ่มต้นต่อไปนี้: $ find alpha alpha alpha/charlie alpha/charlie/alpha alpha/charlie/phi alpha/charlie/beta alpha/charlie/gamma alpha/delta alpha/bravo และด้วย-depthจะดำเนินการดังนี้: $ find alpha -depth alpha/charlie/alpha alpha/charlie/phi alpha/charlie/beta alpha/charlie/gamma alpha/charlie alpha/delta alpha/bravo alpha อย่างไรก็ตามสิ่งที่ฉันต้องการคือตัวเลือก (สมมติ) ต่อไปนี้: $ find alpha -bfs alpha alpha/charlie alpha/delta …
17 find 

5
การใช้รายการชื่อไฟล์ที่สร้างขึ้นเป็นรายการอาร์กิวเมนต์ - พร้อมช่องว่าง
findฉันพยายามที่จะเรียกใช้สคริปต์กับรายการของชื่อไฟล์ที่เก็บรวบรวมโดย ไม่มีอะไรพิเศษเพียง someting เช่นนี้: $ myscript `find . -name something.txt` ปัญหาคือชื่อพา ธ บางส่วนมีช่องว่างดังนั้นพวกเขาจึงแยกออกเป็นชื่อที่ไม่ถูกต้องสองชื่อในการขยายอาร์กิวเมนต์ ปกติฉันจะล้อมรอบชื่อด้วยเครื่องหมายคำพูด แต่ที่นี่พวกเขาแทรกโดยการขยาย backquote ฉันพยายามกรองเอาท์พุทของfindและรอบ ๆ ชื่อไฟล์แต่ละรายการด้วยเครื่องหมายคำพูด แต่เมื่อถึงเวลาที่เห็นพวกเขามันสายเกินไปที่จะดึงออกมาและพวกเขาจะถือว่าเป็นส่วนหนึ่งของชื่อไฟล์: $ myscript `find . -name something.txt | sed 's/.*/"&"/'` No such file or directory: '"./somedir/something.txt"' ใช่นั่นเป็นกฎสำหรับวิธีการประมวลผลบรรทัดคำสั่ง แต่ฉันจะแก้ไขได้อย่างไร นี่เป็นเรื่องที่น่าอาย แต่ฉันไม่สามารถหาวิธีที่เหมาะสมได้ ในที่สุดฉันก็รู้ว่าจะทำอย่างไรกับxargs -0 -n 10000... แต่มันเป็นแฮ็คที่น่าเกลียดที่ฉันยังต้องการถาม: ฉันจะอ้างถึงผลลัพธ์ของการขยาย backquote หรือบรรลุผลแบบเดียวกันได้อย่างไร? แก้ไข:ฉันสับสนเกี่ยวกับความจริงที่ว่าxargs ไม่เก็บขัดแย้งทั้งหมดเป็นรายการอาร์กิวเมนต์เดียวเว้นแต่จะบอกเป็นอย่างอื่นหรือข้อ จำกัด …

4
วิธีการตรวจสอบว่า "ค้นหา" พบการแข่งขันใด ๆ หรือไม่
มีวิธีการที่ใช้สำนวนในการตรวจสอบว่า "ค้นหา" พบการแข่งขันใด ๆ หรือไม่? ฉันกำลังใช้ COUNT=`find ... | wc -l` if [ "$COUNT" -gt 0 ]; then แต่ดูเหมือนว่าฉันจะอ้อมค้อมเล็กน้อย นอกจากนี้ฉันต้องการหยุดค้นหาเมื่อพบคู่ที่ตรงกันดังนั้นจึงไม่ต้องเสียเวลาและความพยายาม ฉันแค่ต้องรู้ว่ามีไฟล์ใดบ้างที่ตรงกัน อัปเดต:ฉันทำผิดพลาดในการเขียนคำถามโดยไม่มีรหัสอยู่ข้างหน้าฉัน: ฉันใช้wc -lในกรณีอื่นซึ่งฉันจำเป็นต้องทราบจำนวนไฟล์ทั้งหมดที่พบ ในกรณีที่ฉันก็แค่ทดสอบว่ามีการแข่งขันใด ๆ if [ -z $(find …) ]ผมใช้
16 find  osx 

6
ฉันจะ grep ซ้ำโดยใช้ไฟล์เก็บถาวรที่บีบอัดได้อย่างไร
ฉันพยายามค้นหาโมดูลuse Test::Versionใน cpan ดังนั้นฉันจึงเคยminicpanสะท้อนมัน ปัญหาของฉันคือฉันต้องวนซ้ำไฟล์เก็บถาวรที่ดาวน์โหลดมาและ grep ไฟล์ที่อยู่ในไฟล์เก็บถาวร มีใครบอกฉันได้ไหมว่าฉันจะทำเช่นนี้? ควรเป็นวิธีที่บอกฉันว่าไฟล์ใดในไฟล์เก็บถาวรและบรรทัดใดที่เปิดอยู่ (หมายเหตุ: ไฟล์เหล่านี้ไม่ใช่ไฟล์ tarball ทั้งหมดเป็นไฟล์ซิป)
16 grep  find  zip  recursive  archive 

3
bash find xargs grep ปรากฏเพียงครั้งเดียวเท่านั้น
อาจจะแปลกไปหน่อยและบางทีอาจมีเครื่องมืออื่นที่จะทำเช่นนี้ แต่ก็ .. ฉันใช้คำสั่ง bash แบบคลาสสิคต่อไปนี้เพื่อค้นหาไฟล์ทั้งหมดที่มีสตริง: find . -type f | xargs grep "something" ฉันมีไฟล์จำนวนมากในหลายระดับ การเกิดขึ้นครั้งแรกของ "บางสิ่ง" นั้นเพียงพอสำหรับฉัน แต่การค้นหายังคงค้นหาอยู่และใช้เวลานานในการทำให้ไฟล์ที่เหลือเสร็จสมบูรณ์ สิ่งที่ฉันต้องการจะทำคือการ "ตอบกลับ" จาก grep back เพื่อค้นหาเพื่อให้การค้นหาสามารถหยุดการค้นหาไฟล์เพิ่มเติมได้ เป็นไปได้ไหม
16 bash  find  grep  xargs 

5
ค้นหาไฟล์ที่มีคำค้นหาหลาย ๆ คำในไฟล์
ฉันกำลังมองหาวิธีที่จะแสดงรายการไฟล์ทั้งหมดในไดเรกทอรีที่มีชุดคำหลักเต็มรูปแบบที่ฉันค้นหาทุกที่ในไฟล์ ดังนั้นคำหลักไม่จำเป็นต้องปรากฏในบรรทัดเดียวกัน วิธีหนึ่งในการทำเช่นนี้คือ: grep -l one $(grep -l two $(grep -l three *)) คำหลักสามคำเป็นเพียงตัวอย่างมันอาจมีสองหรือสี่คำเป็นต้น วิธีที่สองที่ฉันนึกได้คือ: grep -l one * | xargs grep -l two | xargs grep -l three วิธีที่สามที่ปรากฏในคำถามอื่นจะเป็น: find . -type f \ -exec grep -q one {} \; -a \ -exec grep -q two {} \; -a …

2
การลบไฟล์ตามอายุ
มีคำสั่งให้ลบไฟล์ทั้งหมดในไดเรกทอรีที่ไม่ได้รับการแก้ไขในNวันหรือไม่? ฉันต้องล้างบันทึกเก่า ๆ
16 find  rm 

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