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

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

1
ทำไม 'find -exec cmd {} +' ต้องลงท้ายด้วย '{} +'
คำนำ: ผมเข้าใจความแตกต่างระหว่าง&-exec {} \; -exec {} +ฉันยังไม่ได้มีปัญหาเช่นนี้findผมเพียงแค่อยากรู้เกี่ยวกับความหมายของ เมื่อสิ้นสุด-execทะเลาะกับ+แทน;เราต้องการที่จะจบนี้กับ{} +ตัวอย่างเช่น: # FreeBSD find $ find . -type f -exec cp {} /tmp + find: -exec: no terminating ";" or "+" # GNU find is even more cryptic: $ find: missing argument to `-exec' ใช้;ในตัวอย่างเหล่านี้แทนที่จะ+ทำงานได้ดี (แต่เห็นได้ชัดว่าทำอย่างอื่น) จากPOSIX : -exec utility_name [argument ...] …
11 find  history  posix 

3
ฉันจะรับพา ธ สัมบูรณ์จากการใช้คำสั่ง find unix ได้อย่างไร
วิธีรับพา ธ สัมบูรณ์โดยใช้คำสั่ง find จริง ๆ แล้วฉันกำลังเรียกใช้สคริปต์ต่อไปนี้: - find . -size +20M | while read a do i=$(echo $a | sed 's:/: :g') echo $a; j=($i) fileName=${j[${#j[@]}-1]} userName=${j[${#j[@]}-3]} done แต่ตัวแปรที่นี่$aเส้นทางเริ่มต้นจากการแสดงแต่ฉันต้องการเส้นทางที่แน่นอนจาก./Downloads/filename/

3
จะแสดงขนาดไฟล์ "ที่มนุษย์อ่านได้" ในผลลัพธ์การค้นหาได้อย่างไร
ฉันพยายามค้นหาไฟล์ขนาดใหญ่ทั้งหมดบนเซิร์ฟเวอร์ Centos ของฉัน ในการทำเช่นนั้นฉันกำลังใช้: find / -maxdepth 10 -size +100000 -ls ฉันลองเปลี่ยน-lsเป็น-lshแต่ไม่ได้รับอนุญาต ฉันจะแสดงผลลัพธ์เหล่านี้ด้วยขนาดที่มนุษย์อ่านได้ (โดยใช้คำต่อท้าย k, M, …) อย่างไร
11 shell  find  ls 

7
จัดเรียงไฟล์ในไดเรกทอรีซ้ำตามวันที่แก้ไขล่าสุด
จัดเรียงไฟล์ในไดเรกทอรีซ้ำตามวันที่แก้ไขล่าสุด ฉันได้แก้ไขไฟล์จำนวนมากในไดเรกทอรีของฉันต้องการทราบว่าไฟล์เหล่านั้นคืออะไรโดยเรียงลำดับตามวันที่แก้ไขล่าสุดและฉันต้องการให้ส่วนขยายบางส่วนถูกแยกออก ในไดเรกทอรี svn ฉันมีไฟล์. svn จำนวนมากเช่นกันซึ่งฉันไม่ต้องการแสดงในการเรียงลำดับ
11 shell  scripting  find  sort 

4
ค้นหาไดเรกทอรีย่อยสิ้นสุดทั้งหมดในทรี
รับโครงสร้างต่อไปนี้: oz123@debian:~/ $ tree . . ├── a │ ├── a1 │ ├── a2 │ └── a3 ├── a1 │ ├── a11 │ ├── a12 │ └── a31 ├── b │ └── b1 │ ├── b11 │ │ └── b21 │ │ └── b31 │ ├── b12 │ └── b3 …

2
ยกเว้นไดเรกทอรีในการค้นหา
ฉันจะค้นหาทุกไฟล์และไดเรกทอรีที่ตรงกับรูปแบบโดยไม่รวมหนึ่งไดเรกทอรีได้findอย่างไร ว่าฉันมีโครงสร้างไฟล์ดังต่อไปนี้ . foo-ยกเว้นฉัน / foo.txt foo-ยกเว้น-me-not / foo.txt บาร์/ foo.txt foobar / bar.txt foofoo.txt ฉันจะได้รับผลลัพธ์ต่อไปนี้โดยใช้find: ./bar/foo.txt ./bar/foobar ./bar/foobar/foofoo.txt ./foo-exclude-me-not ./foo-exclude-me-not/foo.txt ฉันได้ลองใช้ทั้งสองคำสั่งต่อไปนี้: หา -name 'foo-excluse-me' -prune -o -name 'foo *' หา - ชื่อ 'foo *' \! -path './foo-exclude-me/*' แต่ทั้งคู่กลับมานี้: ./bar/foo.txt ./bar/foobar ./bar/foobar/foofoo.txt ./foo-exclude-me # << this should be excluded ./foo-exclude-me-not …
11 find 

1
ข้ามส่วนขยายพร้อมค้นหาหรือไม่
ฉันต้องการสร้างภาพขนาดย่อจากไฟล์. png หลายไฟล์และต้องการทำสิ่งนี้โดยใช้convertยูทิลิตี้ImageMagicks หากต้องการค้นหาไฟล์ทั้งหมดที่ไม่ใช่ภาพขนาดย่อซ้ำ ๆ ฉันใช้การโทรต่อไปนี้ (แยกออกเป็นสองบรรทัดเพื่อให้สามารถอ่านได้): find . -type f -name "*.png" -not -name "*thumb.png*" \ -exec convert {} -thumbnail 200x200 {}.thumb.png \;` แต่ของหลักสูตรนี้จะสร้างไฟล์ชื่อเมื่อทำงานบนไฟล์ที่เรียกว่าa.png.thumb.png a.pngฉันจะลบ.pngส่วนขยายจาก{}พารามิเตอร์ตัวที่สองที่ส่งผ่านเพื่อแปลงได้อย่างไร
11 find  imagemagick 

6
ค้นหาไฟล์เก็บถาวรทั้งหมดในรูปแบบไฟล์เก็บถาวรที่หลากหลายและค้นหารูปแบบชื่อไฟล์
ที่ดีที่สุดฉันต้องการโทรแบบนี้: $searchtool /path/to/search/ -contained-file-name "*vacation*jpg" ... เพื่อให้เครื่องมือนี้ จะสแกนซ้ำเส้นทางที่กำหนด ใช้ไฟล์ทั้งหมดที่มีรูปแบบไฟล์เก็บถาวรที่สนับสนุนซึ่งอย่างน้อยควรเป็น "ที่พบบ่อยที่สุด" เช่น zip, rar, 7z, tar.bz, tar.gz ... และสแกนรายการไฟล์ของไฟล์เก็บถาวรสำหรับรูปแบบชื่อที่เป็นปัญหา (ที่นี่*vacation*jpg) ฉันรู้วิธีใช้เครื่องมือค้นหา, tar, unzip และเหมือนกัน ฉันสามารถรวมสิ่งเหล่านี้กับเชลล์สคริปต์ แต่ฉันกำลังมองหาวิธีแก้ปัญหาง่าย ๆ ที่อาจเป็นเชลล์วัน - ไลเนอร์หรือเครื่องมือเฉพาะ (ยินดีแนะนำเครื่องมือ GUI ยินดีต้อนรับ
11 find  tar  zip  7z  rar 

2
บันทึก PDF ทั้งหมดในไดเรกทอรีโดยเก็บโครงสร้างไดเรกทอรีไว้
ฉันกำลังพยายามสร้าง tarball บีบอัดที่มีไฟล์ PDF ทั้งหมดที่มีอยู่ในหนึ่งในไดเรกทอรีของฉัน โครงสร้างไดเรกทอรีจะต้องเก็บรักษาไว้ ไม่จำเป็นต้องมีไดเรกทอรีว่างเปล่า แต่ฉันไม่สนใจว่ามีอยู่หรือไม่ ตัวอย่างเช่นสมมติว่าฉันมีไดเรกทอรีที่มีลักษณะเช่นนี้: dir dir/subdir1 dir/subdir1/subsubdir1/song.mp3 dir/subdir2 dir/subdir2/subsubdir1 dir/subdir2/subsubdir1/document.pdf dir/subdir2/subsubdir1/another-song.mp3 dir/subdir2/subsubdir1/top-ten-movies.txt dir/subdir3 dir/subdir3/another-document.pdf หลังจากรันคำสั่งฉันต้องการมีdir.tar.gzสิ่งนี้: dir dir/subdir2 dir/subdir2/subsubdir1 dir/subdir2/subsubdir1/document.pdf dir/subdir3 dir/subdir3/another-document.pdf ไปได้หรือไม่
11 find  tar  recursive 

4
ฉันจะ cat เนื้อหาของไฟล์ที่พบโดยใช้ find เป็นไฟล์เดียวได้อย่างไร?
ฉันพยายามที่จะยิงตัวเองในที่ที่เจ็บ (แย่มาก) โดยการฟอร์แมตพาร์ติชันที่เก็บข้อมูลที่มีค่า แน่นอนมันไม่ได้ตั้งใจ แต่มันเกิดขึ้น อย่างไรก็ตามฉันจัดการเพื่อใช้testdiskและphotorecกู้คืนข้อมูลส่วนใหญ่ ตอนนี้ฉันมีข้อมูลทั้งหมดที่แจกจ่ายไปแล้วกว่า 25,000 ไดเรกทอรี ไฟล์ส่วนใหญ่เป็นไฟล์. txt ส่วนที่เหลือเป็นไฟล์รูปภาพ มีไฟล์. txt มากกว่า 300 ไฟล์ในแต่ละไดเรกทอรี ฉันสามารถgrepหรือใช้findเพื่อแยกสตริงจากไฟล์. txt และส่งออกไปยังไฟล์ ตัวอย่างเช่นต่อไปนี้เป็นบรรทัดที่ฉันใช้ตรวจสอบว่าข้อมูลของฉันอยู่ในไฟล์ที่กู้คืนแล้ว: find ./recup*/ -name '*.txt' -print | xargs grep -i "searchPattern" ฉันสามารถเอาท์พุท "searchPattern" ไปยังไฟล์ได้ แต่นั่นให้รูปแบบนั้น นี่คือสิ่งที่ฉันต้องการจะทำจริง: ผ่านไฟล์ทั้งหมดและค้นหาสตริงเฉพาะ หากพบสตริงนั้นในไฟล์ให้จับเนื้อหาทั้งหมดของไฟล์นั้นไปยังไฟล์เอาต์พุต หากพบรูปแบบในไฟล์มากกว่าหนึ่งไฟล์ต่อท้ายเนื้อหาของไฟล์ที่ตามมาไปยังไฟล์เอาต์พุตนั้น โปรดทราบว่าฉันไม่ต้องการส่งออกรูปแบบที่ฉันค้นหา แต่เนื้อหาทั้งหมดของไฟล์ที่พบรูปแบบ ฉันคิดว่ามันเป็นไปได้ แต่ฉันไม่รู้วิธีที่จะคว้าเนื้อหาทั้งหมดของไฟล์หลังจาก grepping รูปแบบเฉพาะจากมัน

9
แสดงเฉพาะไฟล์ที่ขึ้นต้นด้วย (ซ่อน)
ฉันพยายามแสดงเฉพาะไฟล์ที่ซ่อนอยู่ แต่ไม่รู้ว่าจะทำอย่างไร ใช้งานได้ (แต่การจับคู่ยังจุดในที่อื่น ๆ ) ls -la | grep '\.' พยายามเพิ่ม^แต่ไม่พบวิธีแก้ปัญหา
11 find  ls  dot-files 

3
ลบไฟล์ทั้งหมดยกเว้นในไดเรกทอรีย่อยที่แน่นอนด้วยการค้นหา
ฉันต้องการที่จะซ้ำลบไฟล์ทั้งหมดไม่สามารถเข้าถึงในขณะที่อยู่ในโฟลเดอร์ยกเว้นไฟล์ทั้งหมดในโฟลเดอร์ย่อยab find a \( -name b -prune \) -o -type f -delete อย่างไรก็ตามฉันได้รับข้อความแสดงข้อผิดพลาด: ค้นหา: การกระทำ -delete เปิดโดยอัตโนมัติ -depth แต่ -prune ไม่ทำอะไรเลยเมื่อ -depth มีผล หากคุณต้องการดำเนินการต่อให้ใช้ตัวเลือก -depth อย่างชัดเจน การเพิ่ม-depthทำให้ไฟล์ทั้งหมดbรวมอยู่ด้วยซึ่งจะต้องไม่เกิดขึ้น ใครรู้วิธีที่ปลอดภัยในการทำงานนี้
11 find  directory  rm 

2
จัดรูปแบบไฟล์ XML จำนวนมาก
ฉันจัดการไฟล์ XML จำนวนมากที่กระจัดกระจายไปทั่วโครงสร้างไดเรกทอรีที่ซ้อนกัน ฉันพยายามต่อไปนี้: $ find . -name "*.xml" -type f | xargs -- xmllint --format ปัญหาคือการสร้างผลลัพธ์ XML ที่จัดรูปแบบแล้วบนหน้าจอ แต่จะไม่เปลี่ยนไฟล์ ฉันจะเปลี่ยนคำสั่งนี้เพื่อให้เนื้อหาไฟล์จริงมีการเปลี่ยนแปลงได้อย่างไร?
11 find  xargs  xml 


1
วิธีการเปลี่ยนการอนุญาตของไฟล์หลายไฟล์ที่พบด้วยคำสั่ง find?
ฉันมีไดเรกทอรีพร้อมไฟล์จำนวนมาก ส่วนหนึ่งของไฟล์มี755สิทธิ์และส่วนอื่นมี644สิทธิ์ ผมอยากจะแปลงไฟล์ที่มีสิทธิ์ในการ755 644ฉันได้ลองบรรทัดต่อไปนี้โดยใช้มันจากไดเรกทอรีตัวเอง: find . -perm 755 -exec chmod 644 {}\; อย่างไรก็ตามผลที่ได้รับอนุญาตมีการเปลี่ยนแปลงเฉพาะสำหรับไดเรกทอรีตัวเองและหลังจากเปลี่ยนกลับฉันพบว่าสิทธิ์ของไฟล์ยังคงไม่เปลี่ยนแปลง ฉันพลาดอะไรไปหรือเปล่า?

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