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

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

3
ชื่อไฟล์ 'find -exec' pass มีช่องว่างอย่างไร
หากฉันมีไดเรกทอรีที่มีไฟล์บางไฟล์ที่ชื่อมีช่องว่างเช่น $ ls -1 dir1 file 1 file 2 file 3 ฉันสามารถคัดลอกทั้งหมดไปยังไดเรกทอรีอื่นเช่นนี้ได้สำเร็จ: $ find dir1 -mindepth 1 -exec cp -t dir2 {} + อย่างไรก็ตามการส่งออกของfind dir1 -mindepth 1มีช่องว่างที่ไม่หนี: $ find dir1 mindepth 1 dir1/file 1 dir1/file 3 dir1/file 3 หากฉันใช้print0แทนprintเอาต์พุตยังคงมีช่องว่างที่ไม่ได้ใช้ Escape: $ find dir1 mindepth 1 -print0 dir1/file 1dir1/file 2dir1/file 3 …

9
วิธีเชื่อมโยงคำสั่ง 'date -d @xxxxxx' และ 'find ./' ได้อย่างไร
ฉันมีไดเรกทอรีที่ชื่อ timestamps ให้ในมิลลิวินาทีตั้งแต่ 1970-01-01: 1439715011728 1439793321429 1439879712214 . . และฉันต้องการผลลัพธ์เช่น: 1442039711 Sat Sep 12 08:35:11 CEST 2015 1442134211 Sun Sep 13 10:50:11 CEST 2015 1442212521 Mon Sep 14 08:35:21 CEST 2015 . . ฉันสามารถแสดงรายการไดเรกทอรีทั้งหมดตามคำสั่ง: find ./ -type d | cut -c 3-12 แต่ฉันไม่สามารถใส่เอาต์พุตไปที่คำสั่งถัดไป: date -d @xxxxxxและจัดการกับเอาต์พุต ฉันจะทำสิ่งนี้ได้อย่างไร
14 shell  find  date 

2
คำว่า newermt หมายถึงอะไรในคำสั่ง find?
ฉันรู้ว่าฉันสามารถใช้ตัวเลือกนี้เพื่อค้นหาไฟล์ระหว่างเวลาที่แก้ไขโดยเฉพาะ แต่ฉันอยากรู้เกี่ยวกับสิ่งนี้หมายความว่าอย่างไร ฉันเคยman find | grep newermtพยายามหาบางอย่าง แต่ฉันไม่ได้รับเนื้อหาโดยตรง ดูเหมือน-newer fileและmtimeสิ่งต่าง ๆ อาจมีความสัมพันธ์กับมัน แต่ฉันไม่แน่ใจ.. ดังนั้นสิ่งที่-newermtจริงหมายถึงอะไร

1
ค้นหาไฟล์ที่ชื่อขึ้นต้นด้วยอักษรตัวใหญ่
ฉันพยายามค้นหาไฟล์ทั้งหมดที่มีชื่อขึ้นต้นด้วยอักษรตัวใหญ่ ฉันได้ลองใช้คำสั่งต่อไปนี้: find . -type f -regex '.*\/[A-Z][^/]*' มันกำลังค้นหาเส้นทางด้วยตัวอักษรตัวพิมพ์เล็กเท่านั้น ผลงานดังต่อไปนี้: find . -type f -regex '.*\/[ABCDEFGHIJKLMNOPQRSTUVWXYZ][^/]*' เช่นเดียวกับ: find . -type f | grep '.*\/[A-Z][^/]*$' ฉันได้ลองใช้ตัวเลือกต่าง ๆ ทั้งหมดregextypeโดยใช้ผลลัพธ์เดียวกัน ทำไมfindประกอบด้วยตัวอักษรตัวพิมพ์เล็กใน[A-Z]? ฉันคิดว่า regex [a-zA-Z]สำหรับที่เป็น มีวิธีใดที่จะระบุช่วงของตัวอักษรตัวพิมพ์ใหญ่เท่านั้นfindหรือไม่
14 find 

5
เรียงลำดับเอาต์พุตของ find -exec ls
มันเป็นไปได้ที่จะส่งออกของfind … -exec ls -ls ;เรียงตามลำดับตัวอักษรโดยชื่อไฟล์? นี่คือคำสั่ง cron ของฉัน: find /home/setefgge/public_html -type f -ctime -1 -exec ls -ls {} \; คำสั่งนี้ใช้งานได้ดีส่วนใหญ่ แต่ผลลัพธ์จะไม่เรียงตามลำดับที่มีความหมายใด ๆ มันจะมีประโยชน์มากหากพวกเขาจะเรียงตามฟิลด์ชื่อไฟล์
14 find  ls  sort 

3
แยกออกจากการค้นหาหาก -exec ล้มเหลว
มีวิธีการเขียนfindเพื่อที่จะแบ่งหากหนึ่งใน-execการดำเนินงานล้มเหลวในไฟล์หรือไม่ เช่น ( javacใช้สะดวกเป็นโปรแกรมที่สามารถส่งคืนรหัสออก 1 ในบางไฟล์และไม่มีเหตุผลอื่น): $ echo "public classXX A{}" >> A.java $ echo "public class B{}" >> B.java $ find . -iname \*.java -exec javac {} \; ./A.java:1: error: class, interface, or enum expected public classXX A{} ^ 1 error ในตัวอย่างด้านบนถึงแม้ว่าexecไฟล์ในไฟล์A.javaล้มเหลว (และส่งคืนโค้ดการออกเป็น 1) findคำสั่งจะดำเนินการและคอมไพล์ไฟล์B.javaเช่นกัน มีวิธีแบ่งfindหรือควรใช้รูปแบบบางอย่างforแทนหรือไม่ รุ่นที่ฉันค้นหา: $ find …
14 find 

5
find คำสั่งใน cygwin การจัดรูปแบบพารามิเตอร์ไม่ถูกต้อง
ฉันใช้ cygwin ในเครื่อง windows ของฉัน ฉันพยายามค้นหาและมันกำลังทำให้รูปแบบพารามิเตอร์ไม่ถูกต้อง ทำไมถึงเป็นอย่างนั้น? $ ls bootstrap.jar catalina-tasks.xml catalina.bat catalina.sh commons-daemon-native.tar.gz commons-daemon.jar cpappend.bat digest.bat digest.sh setclasspath.bat setclasspath.sh shutdown.bat shutdown.sh startup.bat startup.sh tomcat-juli.jar tomcat-native.tar.gz tool-wrapper.bat tool-wrapper.sh version.bat version.sh $ find . -name "version.sh" FIND: Parameter format not correct ฉันควรติดตั้งอะไรขณะติดตั้ง cygwin หรือฉันทำอะไรผิดหรือเปล่า?
14 find  cygwin 

4
ค้นหา -exec ในสคริปต์ทุบตีพร้อมส่วนขยายตัวแปร
ฉันพยายามเรียกใช้คำสั่งคล้ายกับคำสั่งด้านล่างในสคริปต์ทุบตี มันควรจะค้นหาผ่านโฟลเดอร์ย่อยทั้งหมดและคัดลอกไฟล์ทั้งหมดของบางประเภทให้อยู่ในระดับรากของ$sourcedir$targetdir #!/bin/bash # These are set as arguments to the script, not hard-coded sourcedir="/path/to/sourcedir" targetdir="/path/to/targetdir" find "$sourcedir" -type f -name "*.type" -exec sh -c 'cp "$1" "$2/`basename "$1"`"' "{}" "$targetdir" \; นี้ดูเหมือนว่าจะสวยใกล้เคียงยกเว้นว่า{}จะไม่ถูกส่งผ่านไปในขณะที่$2ไป-exec sh -c ... ฉันต้องการทำเช่นนี้ให้ใกล้เคียงกับ "ทางที่ถูกต้อง" ที่สุดเท่าที่จะทำได้ด้วยความอดทนสำหรับตัวละครพิเศษในชื่อไฟล์ แก้ไข:ฉันเห็นคนแนะนำให้ใช้xargsหรือการผูกมัดข้อโต้แย้ง ฉันอยู่ภายใต้การแสดงผลว่านี่เป็นเพียงข้อโต้แย้งที่ จำกัด ตัวอย่างเช่นถ้าฉันมีไฟล์. jpg หลายพันไฟล์ที่ฉันพยายามคัดลอกจากไดเรกทอรีแกลเลอรี่จำนวนมากไปยังไดเรกทอรีสไลด์โชว์ยักษ์โซลูชั่นการเชื่อมโยงจะยังคงใช้งานได้หรือไม่ แก้ไข 2:ปัญหาของฉันคือฉันหายไป_ก่อนที่ตัวเลือกแรกของฉันที่จะดวลจุดโทษใน-execคำสั่ง สำหรับทุกคนที่สงสัยเกี่ยวกับวิธีทำให้คำสั่ง find ทำงานได้เพิ่ม_และทุกอย่างจะดีขึ้น: …

13
ค้นหาไฟล์ที่มนุษย์อ่านได้
ฉันกำลังพยายามที่จะหาวิธีที่มีประสิทธิภาพในการทำ5 ระดับของความท้าทายโจร อย่างไรก็ตามฉันมีไฟล์เป็นจำนวนมากและมีเพียงไฟล์เดียวที่ตรงตามเกณฑ์ต่อไปนี้: มนุษย์สามารถอ่านได้ ขนาด 1033 ไบต์ ไม่สามารถทำงานได้ ตอนนี้ฉันกำลังใช้findคำสั่งและฉันสามารถค้นหาไฟล์ที่ตรงกับเกณฑ์สองข้อสุดท้าย: find . -size 1033c ! -executable อย่างไรก็ตามฉันไม่รู้วิธีแก้ตัวไฟล์ที่ไม่ใช่ที่มนุษย์อ่านได้ วิธีแก้ไขปัญหาที่ฉันพบสำหรับความท้าทายนั้นใช้-readableพารามิเตอร์ทดสอบ แต่ฉันคิดว่ามันไม่ได้ผล -readableดูเฉพาะสิทธิ์ของไฟล์ไม่ใช่เนื้อหาในขณะที่คำอธิบายการท้าทายขอไฟล์ ASCII หรืออะไรทำนองนั้น
14 files  find 

5
วิธีค้นหาไฟล์ที่มีสองคำที่แตกต่างกันอยู่?
ฉันกำลังมองหาวิธีการค้นหาไฟล์ที่มีอินสแตนซ์ของคำสองคำอยู่ในไฟล์เดียวกัน ฉันใช้สิ่งต่อไปนี้เพื่อทำการค้นหาจนถึงจุดนี้: find . -exec grep -l "FIND ME" {} \; ปัญหาที่ฉันพบคือหากไม่มีช่องว่างตรงระหว่าง "FIND" และ "ME" ผลการค้นหาจะไม่ให้ไฟล์ ฉันจะปรับสตริงการค้นหาเดิมที่ทั้งคำว่า "FIND" และ "ME มีอยู่ในไฟล์ได้อย่างไรเมื่อเทียบกับ" FIND ME " ฉันใช้ AIX
14 grep  find  search 

2
ทำไมจุดในการค้นหาคำสั่ง
โดยปกติแล้วจะเห็นfindคำสั่งที่มีลักษณะดังนี้: $ find . -name foo.txt เมื่อการค้นหาจะเริ่มจากไดเรกทอรีปัจจุบัน ฉันพบว่าบนเครื่องของฉัน (Ubuntu, Cygwin) ฉันได้ผลลัพธ์เดียวกันโดยไม่มีจุด ทำไมถึงรวมอยู่ด้วย? มันเป็นเพียงการประชุมที่จะชัดเจนหรือเป็น / มันจำเป็นในบางระบบ?
14 find 

3
เป็นไปได้หรือไม่ที่จะวางซ้อน 'find -exec' ภายใน 'find -exec' อื่น?
สิ่งต่อไปนี้คือสิ่งที่ฉันเป็น แต่รหัสของฉันไม่ทำงานไม่ว่าฉันจะหลบหนี{}และ+ ; find ./ -maxdepth 1 -type d -name '.*' -exec \ find {} -maxdepth 1 -type f -name '*.ini' -exec \ md5sum \{\} \\; \; หลังจากเห็นคำถาม Unix - & - Linuxนี้ฉันพบว่าโค้ดต่อไปนี้ใช้งานได้ แต่ไม่พบการซ้อนกันและฉันสงสัยว่ามีวิธีที่ดีกว่าในการทำงานนี้โดยเฉพาะ find ./ -maxdepth 1 -type d -name '.*' \ -exec bash -c 'for x; do find …

6
ยกเว้นไดเรกทอรีในการค้นหาการค้นหา
การค้นหาด้วยlocateค้นหาพา ธ ในระบบไฟล์ บ่อยครั้งที่คุณรู้ว่าคุณมีความสนใจในไฟล์อย่างใดอย่างหนึ่งเท่านั้นหรือไดเรกทอรีเท่านั้น การค้นหา 'ค้นหา' มักจะส่งคืนผลลัพธ์จำนวนมาก มันจะมีประโยชน์ที่จะรวมเพียงหนึ่งประเภทในผลลัพธ์เพราะจะช่วยให้ผลผลิตสั้นลง แต่มีข้อโต้แย้งที่น่าสนใจที่จะทิ้งไฟล์หรือไดเรคทอรีไว้อย่างใดอย่างหนึ่งเนื่องจากรายการของพา ธ ผลลัพธ์สามารถคลุมเครือไม่เพียง แต่ในทางทฤษฎี ตัวอย่างด้านล่างเป็นกรณีของโลกแห่งความจริงและไม่ผิดปกติ: $ locate --regex --basename "xfce4-keyboard-overlay$" /usr/local/bin/xfce4-keyboard-overlay /usr/local/share/xfce4-keyboard-overlay ตกลงเราพบบางอย่าง! แต่ ... ไฟล์หรือไดเรกทอรี? $ file /usr/local/bin/xfce4-keyboard-overlay /usr/local/bin/xfce4-keyboard-overlay: bash script นั่นคือไฟล์ ... $ file /usr/local/share/xfce4-keyboard-overlay /usr/local/share/xfce4-keyboard-overlay: directory ในขณะที่สองไม่ใช่ ความคลุมเครือนี้คือการทำให้รายการยาวของเส้นทางยากที่จะอ่านดังนั้นมันจะดีจริงๆไดเรกทอรีกรองออกเช่นใช้ตัวเลือกบรรทัด comman locateสำหรับ สิ่งนี้มีอยู่จริงหรือไม่? แม้ว่าตัวกรองสำหรับไดเรกทอรีแยกจากการค้นหาหรือไม่ อย่างน้อยหนึ่งสามารถใช้สคริปต์เพื่อวนซ้ำชื่อไฟล์ทั้งหมดเพื่อตรวจสอบ - ซึ่งอาจช้า
14 files  find  directory  locate 

2
find คำสั่งที่มีตัวนับ regex เช่น {1,2}
ฉันพยายามสร้างสตริงคำสั่ง find ที่จะค้นหาไฟล์ทั้งหมดที่ลงท้ายด้วยหมายเลข 1-99 แต่ไม่รวมไฟล์อื่นทั้งหมด เช่นฉันต้องการค้นหาmyfile1 myfile99แต่ไม่ใช่myfile456และไม่ใช่myfilebackup regex ที่ฉันคิดคือคือmyfile[1-9]{1,2}แต่ฉันไม่สามารถทำงานกับการค้นหา find . -regex '.*myfile[0-9]{1,2}' หรือ find . -iname 'myfile[0-9]{1,2}' จากสิ่งที่ฉันเห็นมันเป็น{1,2}ส่วนที่ไม่ทำงาน (โดยวิธีการที่คุณสามารถใช้-name -regexinterchangably?) ความช่วยเหลือใด ๆ ที่ชื่นชม


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