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

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

3
ค้นหาด้วย -execdir
เมื่อฉันทำงานfindด้วย-execdirฉันไม่ได้รับผลลัพธ์ที่ฉันคาดหวัง ตัวอย่างเช่น: mkdir -p a/b/c find . -type d -execdir touch foo \; $ tree a a ├── b │ ├── c │ └── foo └── foo ไดเรกทอรีcไม่มีfooไฟล์ ฉันจะfindไปเยี่ยมชมและทำบางสิ่งในพื้นที่ในแต่ละไดเรกทอรีได้อย่างไร

8
จะค้นหาไฟล์ที่มีอักขระ 100% NUL ในเนื้อหาได้อย่างไร
คำสั่งบรรทัดคำสั่ง Linux ที่สามารถระบุไฟล์ดังกล่าวคืออะไร? AFAIK findคำสั่ง (หรือgrep) สามารถจับคู่สตริงเฉพาะภายในไฟล์ข้อความเท่านั้น แต่ผมอยากให้ตรงกับเนื้อหาทั้งหมดคือผมอยากจะเห็นไฟล์ที่ตรงกับการแสดงออกปกติ\0+, ไม่สนใจตัวอักษรท้ายบรรทัด (s) บางทีfind . cat | grepสำนวนอาจใช้งานได้ แต่ฉันไม่ทราบวิธีการทำ grep โดยไม่สนใจบรรทัด (และถือว่าไฟล์เป็นไบนารี) พื้นหลัง: ทุกสองสามวันเมื่อแล็ปท็อปของฉันหยุดทำงานพาร์ติชัน btrfs ของฉันจะสูญเสียข้อมูล: ไฟล์ที่เปิดสำหรับการเขียนจะได้รับเนื้อหาของพวกเขาแทนที่ด้วยศูนย์ (ขนาดของไฟล์ยังคงไม่เปลี่ยนแปลง) ฉันใช้การซิงโครไนซ์และฉันไม่ต้องการให้ไฟล์ปลอมเหล่านี้เผยแพร่: ฉันต้องการวิธีที่จะระบุไฟล์เหล่านั้นเพื่อที่ฉันจะได้ไม่ต้องทำการสำรองข้อมูล

6
find และ echo ชื่อไฟล์ที่พบรูปแบบเท่านั้น
ฉันใช้มันมากการปรับปรุงที่ฉันพยายามทำให้สำเร็จคือการหลีกเลี่ยงชื่อไฟล์ echo ที่ไม่ตรงกับ grep วิธีที่ดีกว่าในการทำเช่นนี้? for file in `find . -name "*.py"`; do echo $file; grep something $file; done
16 grep  find 

1
ทำไมถึงเจอ - ประเภท f` ใช้เวลานานกว่า `หา '
ดูเหมือนว่าfindจะต้องตรวจสอบว่าเส้นทางที่กำหนดนั้นสอดคล้องกับไฟล์หรือไดเรกทอรีอยู่แล้วเพื่อที่จะเดินเนื้อหาของไดเรกทอรีซ้ำ ๆ นี่คือแรงบันดาลใจบางอย่างและสิ่งที่ฉันทำในพื้นที่เพื่อโน้มน้าวตัวเองว่าfind . -type fช้ากว่าfind .จริง ๆ ฉันยังไม่ได้ขุดลงใน GNU ค้นหาซอร์สโค้ดเลย ดังนั้นฉันจึงสำรองไฟล์บางไฟล์ใน$HOME/Workspaceไดเรกทอรีของฉันและไม่รวมไฟล์ที่เป็นส่วนหนึ่งของโครงการหรือไฟล์ควบคุมเวอร์ชัน ดังนั้นฉันจึงรันคำสั่งต่อไปนี้ซึ่งดำเนินการอย่างรวดเร็ว % find Workspace/ | grep -v '/vendor\|/node_modules/\|Workspace/sources/\|/venv/\|/.git/' > ws-files-and-dirs.txt findไปป์grepอาจเป็นรูปแบบที่ไม่ดี แต่ดูเหมือนว่าวิธีที่ตรงที่สุดในการใช้ตัวกรอง regex เมื่อตะกี้ คำสั่งต่อไปนี้มีเฉพาะไฟล์ในผลลัพธ์การค้นหาและใช้เวลานานขึ้นอย่างเห็นได้ชัด % find Workspace/ -type f | grep -v '/vendor\|/node_modules/\|Workspace/sources/\|/venv/\|/.git/' > ws-files-only.txt ฉันเขียนโค้ดเพื่อทดสอบประสิทธิภาพของคำสั่งทั้งสองนี้ (ด้วยdashและtcshเพื่อแยกแยะผลกระทบใด ๆ ที่เชลล์อาจมีแม้ว่าจะไม่ควรมี) tcshผลที่ได้รับการละเว้นเพราะพวกเขากำลังหลักเดียวกัน ผลลัพธ์ที่ฉันได้รับแสดงให้เห็นถึงโทษประสิทธิภาพ 10% -type f นี่คือผลลัพธ์ของโปรแกรมที่แสดงจำนวนเวลาที่ใช้ในการดำเนินการซ้ำ 1,000 คำสั่งต่างๆ …
15 find  performance  gnu 

3
จำกัด POSIX ค้นหาความลึกที่เฉพาะเจาะจงหรือไม่
ฉันสังเกตเห็นเมื่อเร็ว ๆ นี้ว่าข้อกำหนด POSIX สำหรับfindไม่รวมคุณสมบัติ-maxdepthหลัก สำหรับผู้ที่ไม่คุ้นเคยวัตถุประสงค์-maxdepthหลักก็เพื่อ จำกัด จำนวนระดับที่ลึกfindลงไป -maxdepth 0ส่งผลให้อาร์กิวเมนต์บรรทัดรับคำสั่งเท่านั้นที่ถูกประมวลผล -maxdepth 1จะจัดการกับผลลัพธ์โดยตรงภายในอาร์กิวเมนต์บรรทัดคำสั่ง ฯลฯ ฉันจะได้รับพฤติกรรมเทียบเท่ากับ non-POSIX -maxdepthprimary โดยใช้เพียงตัวเลือกและเครื่องมือที่ระบุโดย POSIX ได้อย่างไร (หมายเหตุ: แน่นอนฉันสามารถเทียบเท่า-maxdepth 0โดยใช้-pruneเป็นตัวถูกดำเนินการแรก แต่ไม่ได้ขยายไปถึงความลึกอื่น ๆ )
15 find  posix 

2
ค้นหาไฟล์ที่สร้างโดยผู้ใช้เฉพาะ
ฉันจะไปเกี่ยวกับการค้นหาไฟล์ทั้งหมดที่สร้างโดยผู้ใช้เฉพาะและแสดงบนหน้าจอได้อย่างไร ฉันได้เริ่มสคริปต์ที่แจ้งให้ผู้ใช้ปัจจุบันป้อนชื่อผู้ใช้ที่พวกเขาต้องการดูไฟล์ทั้งหมดของ ฉันคิดถึงการใช้คำสั่ง if หากพิจารณาว่าฉันต้องการรวมการตรวจสอบข้อผิดพลาด echo -e "Option 11: Display all the Files a Particular User Has Created\n\n" echo -e "Enter Username below\n" read username
15 files  find  users 

2
เหตุใด 'find -delete' จึงลบไฟล์ทั้งหมดในไดเรกทอรีซ้ำ
ดังนั้นพฤติกรรมของยูนิกซ์ต่อไปนี้จึงทำให้ฉันเสียค่าใช้จ่ายอย่างมาก: > touch foo > touch bar > ls bar foo > find . -name '*oo' -delete > ls bar > touch baz > ls bar baz > find . -delete -name '*ar' > ls > #WHAAAT? มันสมเหตุสมผลขนาดไหน?
15 files  find 

5
มีวิธีเพิ่มความเร็ว `find 'หรือไม่
ฉันสงสัยว่ามีวิธีเพิ่มfindความเร็วในเทอร์มินัลไม่สมเหตุสมผลว่าการใช้อินเทอร์เน็ต google เพื่อค้นหาจะมีความเร็วที่ดีกว่าการค้นหาสตริงหรือชื่อไฟล์ในเครื่อง ฉันสงสัยว่ามีวิธีใดที่จะมีฐานการจัดทำดัชนีในท้องถิ่นเมื่อสร้างขึ้นในอนาคตคำสั่ง find อาจเร็วมาก หรือข้อเสนอแนะอื่น ๆ ? ขอบคุณ!
15 find 

6
วิธีค้นหาคำในเนื้อหาทั้งหมดของไดเรกทอรีใน linux
ต้องค้นหาบางสิ่งในเนื้อหาทั้งหมด ฉันกำลังพยายาม: find . | xargs grep word ฉันได้รับข้อผิดพลาด: xargs: อัญประกาศ ทำอย่างไรจึงจะได้สิ่งนี้?
15 linux  shell  grep  find  xargs 

3
วิธีอ้างอาร์กิวเมนต์ด้วย xargs
สมมติว่าฉันต้องการลบไฟล์ทั้งหมดในโฟลเดอร์ที่มีขนาดใหญ่กว่า 1 MB $ find . -size +1M | xargs -0 rm นี่จะไม่ลบไฟล์ที่มีพื้นที่ว่างในชื่อ rmดังนั้นผมจึงต้องการที่จะพูดขัดแย้งทั้งหมดส่งไปยัง ถ้าfindให้มันSome report.docxมันควรจะผ่านไป"Some report.docx"rm ฉันจะทำสิ่งนั้นได้อย่างไร
15 shell  find  quoting  rm  xargs 

5
วิธีย้ายไฟล์ตามปี
ฉันต้องการย้ายไฟล์ตามปี ฉันใช้findคำสั่ง find /media/WD/backup/osool/olddata/ -mtime +470 -exec ls -lrth {} \;|sort -k6 แต่สำหรับคำสั่งนี้เพื่อดำเนินการให้สำเร็จฉันจำเป็นต้องรู้แน่นอนmtimeตอนนี้ 470 เป็นเพียงการคาดเดา หมายถึงถ้าฉันสามารถให้ปี 2012 มันให้ไฟล์ที่เกี่ยวข้องกับ 2012 ดังนั้นฉันต้องการคำแนะนำเกี่ยวกับวิธีการ ค้นหาไฟล์ตามปีเช่น 2012 และย้ายไปยังไดเรกทอรีอื่น OS release 5.2 FIND version GNU find version 4.2.27 Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION SELINUX
15 find 

4
เอาต์พุต FIND สี
เป็นไปได้หรือไม่ที่จะได้รับเอาต์พุตสีจากคำสั่งfind ? นั่นคือในเส้นทางของรายการที่พบแต่ละไดเรกทอรีเป็นสีน้ำเงินสคริปต์ที่ปฏิบัติการได้เป็นสีเขียวและอื่น ๆ ฉันใช้เวอร์ชัน 4.4.2 ของfindutils GNU แก้ไข - หากต้องการชี้แจงแต่ละผลลัพธ์จะถูกเน้นเช่นนี้: ./path/to/file.sh ^ ^ ^ | | L green blue (ถ้าเช่นการดำเนินการfind . -type f)
15 bash  find  colors 

2
วิธีการใช้ `find -exec` เพื่อเรียกใช้งานคำสั่งในไดเรกทอรีของไฟล์ที่พบ (ไม่ใช่ไดเรกทอรีปัจจุบัน)?
สมมติว่าผมอยู่ในไดเรกทอรีที่มีไดเรกทอรีย่อยบางdir1, และdir2 dir3แต่ละไดเรกทอรีเหล่านี้มีไฟล์fooและฉันต้องการที่จะดำเนินการคำสั่งเดียวกันfooในแต่ละไดเรกทอรีและมีคำสั่งที่ดำเนินการจากภายในไดเรกทอรีนั้น ถ้าฉันจะทำ "ด้วยมือ" มันจะมีลักษณะเช่นนี้: cd dir1 (execute on foo) cd ../dir2 (execute on foo) cd ../dir3 (execute on foo) มันเป็นความจำเป็นที่คำสั่งจะดำเนินการจากแต่ละไดเรกทอรี fooเป็นสคริปต์การตั้งเวลาแบทช์ (สำหรับ HTCondor หากคุณต้องการทราบ) และจะต้องดำเนินการจากแต่ละไดเรกทอรีย่อยเพื่อให้ผลลัพธ์ของการดำเนินการเริ่มต้นโดยสคริปต์การตั้งเวลาจะสิ้นสุดในแต่ละไดเรกทอรีย่อย คำถาม " ค้นหาไฟล์และดำเนินการคำสั่งในไดเรกทอรีของไฟล์ " เท่าที่ฉันจะบอกได้ไม่ตอบคำถามของฉัน คำตอบแรกสำหรับคำถามนั้นเป็นวิธีแก้ปัญหามากกว่าซึ่งจะไม่ทำงานในกรณีของฉันและคำตอบที่สองไม่มีคำอธิบายเพียงพอที่ฉันจะรู้วิธีใช้งาน
15 find 

1
ค้นหาไม่ทำงานบนเส้นทาง symlinked?
ถ้าฉันเรียกใช้คำสั่งนี้find $HOME/MySymlinkedPath -name "run*.sh"ไม่มีอะไรเกิดขึ้นและไม่มีข้อผิดพลาด ('MySymlinkedPath' เป็นเส้นทาง symlinked ไปยังฮาร์ดไดรฟ์อื่น ๆ แล้ว $ HOME ของฉัน) สิ่งเหล่านี้ล้มเหลว: find ~/MySymlinkedPath -name "run*.sh" find /home/MyUserName/MySymlinkedPath -name "run*.sh" และเพื่อให้แน่ใจว่าเส้นทางที่ไม่มีอยู่นี้ล้มเหลว (แน่นอน) find $HOME/MySymlinkedPathDUMMYTEST -name "run*.sh"ดังนั้นจึงมีการค้นพบเส้นทาง (เพราะข้อผิดพลาดนั้นไม่ได้เกิดขึ้น) แต่findไม่ได้ทำการค้นหาบนเส้นทางนี้ ใช้งานได้เฉพาะถ้าฉันcd $HOME/MySymlinkedPathก่อนและลบการอ้างอิงเส้นทางเช่นนี้find -name "run*.sh"แต่นั่นไม่ดีสำหรับสคริปต์ของฉัน ข้อมูลเพิ่มเติม : คำสั่งนี้ใช้งานได้ตามปกติls $HOME/MySymlinkedPath/run*.shและถ้าฉันไปที่นั่นcd $HOME/MySymlinkedPathและรันสิ่งนี้ls ..ผลลัพธ์ไม่ใช่สิ่งที่ฉันคาดหวัง - รายการของเส้นทางที่เส้นทาง symlinked ตั้งอยู่ - จะส่งกลับรายการเส้นทางที่แท้จริงของ สื่ออื่น / ฮาร์ดไดรฟ์ !!! …
15 find  symlink  path 

2
ปัญหาด้านความปลอดภัยและสภาพการแข่งขันในการใช้งาน 'find -exec`' มีอะไรบ้าง?
จากfindหน้าคน : -exec command ; There are unavoidable security problems surrounding use of the -exec action; you should use the -execdir option instead. -execdir command {} + Like -exec, but the specified command is run from the subdirectory containing the matched file, which is not normally the directory in which …
14 shell  find  security 

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