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

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

2
ค้นหาไฟล์ที่ผู้ใช้ไม่สามารถอ่านได้?
ฉันต้องการค้นหาไฟล์ที่ผู้ใช้บางรายไม่สามารถอ่านได้ สมมติว่าชื่อผู้ใช้คือ "user123" และอยู่ในกลุ่มชื่อ "user123" ฉันต้องการค้นหาไฟล์ที่ถ้าพวกเขาเป็นเจ้าของโดย user123 มี u + r บน; ความล้มเหลวที่ถ้าไฟล์เป็นกลุ่มผู้ใช้ 123 ควรมี g + r ใน; ความล้มเหลวที่มันสามารถมี o + r บน เนื่องจาก GNU find มี "- อ่านได้" ฉันสามารถทำสิ่งนี้ได้: sudo -u user123 find /start ! -readable -ls อย่างไรก็ตามกระบวนการต้องดำเนินการโดยผู้ใช้ที่ไม่มีสิทธิ์เข้าถึง sudo ดังนั้นฉันจึงลองทำสิ่งนี้: (มันไม่ตรวจสอบ o + r แต่นั่นไม่สำคัญในตอนนี้) find /start \( …
12 find 

1
ความแตกต่างเมื่อใช้ FIND ระหว่าง -name และ -iname
คำถามก็คือทุกอย่างฉันเห็นทั้งคู่แล้ว find -name และ find -iname ใช้ทั่วทุกสถานที่โดยไม่มีรูปแบบที่มองเห็นได้ มีใครอธิบายความแตกต่างบางทีมีตัวอย่างให้อธิบาย
12 find 

2
bash find: รับไดเรกทอรีของไฟล์ที่พบ
ฉันมีโฟลเดอร์หลักชื่อ "parent_folder" ที่มีโฟลเดอร์ย่อยจำนวนมากในโฟลเดอร์ย่อยเหล่านี้เป็นไฟล์ชื่อ "foo.mp4" ฉันสามารถค้นหาไฟล์เหล่านี้ได้อย่างง่ายดายโดยทำสิ่งนี้: mymacbook:parent_folder username$ find ./ -name "foo.mp4" -exec echo {} \; ตอนนี้จะส่งคืนพา ธ ของแต่ละไฟล์โดยสัมพันธ์กับ parent_folder / ./path/to/foo.mp4 ฉันจะกลับไปยังเส้นทางที่ไม่มีชื่อไฟล์ได้อย่างไร
12 shell  find  osx 


4
ค้นหาไฟล์ที่ไม่อยู่ใน. gitignore
ฉันมีคำสั่ง find ที่แสดงไฟล์ในโครงการของฉัน: find . -type f -not -path './node_modules*' -a -not -path '*.git*' \ -a -not -path './coverage*' -a -not -path './bower_components*' \ -a -not -name '*~' ฉันจะกรองไฟล์ได้อย่างไรจึงไม่แสดงไฟล์ที่อยู่ใน. gitignore ฉันคิดว่าฉันใช้: while read file; do grep $file .gitignore > /dev/null && echo $file; done แต่ไฟล์. gitignore สามารถมีรูปแบบ glob (เช่นกันมันจะไม่ทำงานกับพา ธ …
12 grep  find  wildcards  git 

2
วิธีการใช้ตรรกะหรือในการค้นหา?
ใน bash shell lsสามารถใช้ฟังก์ชัน OR แบบลอจิคัลหรือผ่าน (แน่นอนฉันสามารถทำได้ls name1 name2แต่ตัวอย่างจริงของฉันซับซ้อนกว่า): ls @(name1|name2) มีวิธีการทำเช่นนี้โดยใช้find? การปฏิบัติที่ไร้เดียงสาของฉัน: find . -maxdepth 1 -name @("name1"|"name2") ไม่ทำงาน (มันไม่มีผลอะไร)
12 find  ls  patterns 

3
diff -r สำหรับไฟล์บางประเภทเท่านั้น
มีวิธีที่ฉันสามารถทำซ้ำที่แตกต่างกันของสองไดเรกทอรี แต่เปรียบเทียบไฟล์ (ในสถานที่นั้น ๆ ) ที่ตรงกับชื่อไฟล์ที่เฉพาะเจาะจงหรือคำกริยา filetype? เช่นฉันต้องการทำบางสิ่งเช่น diff -r dir-a dir-b -filenames *.java, ivy.xml, build.xml ... หรือดีกว่า: diff -r dir-a dir-b -filetype text เห็นได้ชัดว่ามันไม่ได้บังคับให้ใช้diffเพราะฉันคิดว่าคาถาด้วยfindและ-exec diffอาจทำเคล็ดลับ (ฉันเพิ่งไม่รู้วิธีการสร้าง filepaths เสริมในกรณีหลัง)

5
พบไฟล์ที่เปิดด้วยคำสั่ง 'find'
นี่อาจเป็นเรื่องง่าย แต่ฉันไม่สามารถเข้าใจได้และมันก็ไม่สามารถค้นหาได้ ในลำดับชั้นของโฟลเดอร์ฉันมีไฟล์ประเภท xyz หนึ่งไฟล์ ฉันต้องการค้นหาไฟล์นั้นและเปิดด้วยคำสั่งเทอร์มินัล find . -name *.xyz นี่จะส่งคืนไฟล์ที่ฉันกำลังค้นหา ตอนนี้ฉันจะเปิดโดยอัตโนมัติโดยไม่ต้องพิมพ์ชื่อได้อย่างไร find . -name *xyz | open มันใช้งานไม่ได้ มันบอกว่าไม่พบคำสั่งเปิด
12 linux  terminal  find  pipe 

5
วิธีการจัดเรียงขนาดที่มนุษย์อ่านได้
โดยทั่วไปฉันกำลังมองหาไฟล์แล้วจัดเรียงตามขนาด สคริปต์ทำงานได้ถ้าฉันไม่จัดเรียงตามขนาดที่มนุษย์อ่านได้ แต่ฉันต้องการขนาดที่มนุษย์สามารถอ่านได้ ฉันจะจัดเรียงขนาดที่มนุษย์สามารถอ่านได้ได้อย่างไร ตัวอย่างเช่น: ls -l | sort -k 5 -n | awk '{print $9 " " $5}' ใช้งานได้ตามที่คาดหวังฉันมีขนาดไฟล์ของฉันเป็นไบต์จากน้อยไปมาก: 1.txt 1 test.txt 3 bash.sh* 573 DocGeneration.txt 1131 andres_stuff.txt 1465 Branches.xlsx 15087 foo 23735 bar 60566 2016_stuff.pdf 996850 ตอนนี้ฉันต้องการให้ขนาดที่มนุษย์อ่านได้ดังนั้นฉันจึงเพิ่มพารามิเตอร์ -h ลงใน ls และตอนนี้ไฟล์บางไฟล์ไม่เป็นระเบียบ: ls -lh | sort -k 5 -n …
11 find  ls  sort 

2
ใช้คำสั่ง chmod อย่างคัดเลือก
ฉันต้องการตั้งค่าการอนุญาต 755 ในทุกไฟล์และไดเรกทอรีย่อยภายใต้ไดเรกทอรีเฉพาะ แต่ฉันต้องการรัน chmod 755 เฉพาะสำหรับองค์ประกอบเหล่านั้นซึ่งไม่ได้รับอนุญาต 755 find /main_directory/ -exec chmod 755 {} \; หากfindคำสั่งส่งคืนรายการแบบยาวสิ่งนี้จะใช้เวลานาน ฉันรู้ว่าฉันสามารถใช้คำสั่ง stat เพื่อตรวจสอบการอนุญาตระดับไฟล์ Octal ของแต่ละองค์ประกอบจากนั้นใช้ if-else เพื่อสลับการอนุญาตไฟล์ แต่มีวิธีการบรรทัดเดียวที่ใช้findและxargsก่อนอื่นตรวจสอบสิทธิ์ไฟล์ / ไดเรกทอรีที่มี แล้วใช้chmodเพื่อเปลี่ยนเป็น 755 หากตั้งค่าเป็นอย่างอื่น

4
ไดเรกทอรีที่มีสองไฟล์ขึ้นไป
ฉันต้องการค้นหาไดเรกทอรีย่อยของไดเรกทอรีปัจจุบันซึ่ง (นั่นคือไดเรกทอรีย่อย) มีไฟล์ปกติอย่างน้อย 2 ไฟล์ ฉันไม่สนใจไดเรกทอรีที่มีไฟล์น้อยกว่า 2 ไฟล์และไม่ได้อยู่ในไดเรกทอรีที่มีไดเรกทอรีย่อยเท่านั้น
11 files  find 

4
แปลง glob เป็น `find`
ฉันได้อีกครั้งและอีกครั้งมีปัญหานี้: ฉันมี glob ว่าการแข่งขันว่าไฟล์ที่ถูกต้อง Command line too longแต่สาเหตุ ทุกครั้งที่ฉันแปลงเป็นชุดค่าผสมบางอย่างfindและใช้grepงานได้กับสถานการณ์เฉพาะ แต่ไม่เทียบเท่า 100% ตัวอย่างเช่น: ./foo*bar/quux[A-Z]{.bak,}/pic[0-9][0-9][0-9][0-9]?.jpg มีเครื่องมือสำหรับแปลง globs เป็นfindนิพจน์ที่ฉันไม่ทราบหรือไม่? หรือมีตัวเลือกสำหรับfindจับคู่กลมโดยไม่ต้องจับคู่กลมเดียวกันในส่วนย่อย (เช่นfoo/*.jpgไม่อนุญาตให้จับคู่bar/foo/*.jpg)?
11 find  wildcards 

4
ฉันจะใช้ `find 'เพื่อไปยังไดเรกทอรีของไฟล์นั้นได้อย่างไร
ฉันต้องการค้นหาไฟล์จากนั้นป้อนไดเรกทอรีที่มีไฟล์ ฉันพยายามfind /media/storage -name "Fedora" | xargs cdแต่แน่นอนฉันis not a directoryผิดพลาด ฉันจะป้อนไดเรกทอรีหลักด้วยคำสั่งหนึ่งบรรทัดได้อย่างไร
11 shell  find  xargs  cd-command 

1
มีการอัปเดตอย่างไรเร็วกว่าการค้นหามาก
เป็นวิธีการupdatedbเพื่อให้ได้เร็วกว่าfind? นี่คือการเปรียบเทียบเวลาระหว่างupdatedbและfindคำสั่งที่ทำงานคล้ายกัน compare.sh #!/usr/bin/env bash cmd="sudo updatedb" echo $cmd time eval $cmd cmd="sudo find / \ -fstype ext4 \ -not \( \ -path '/afs/*' -o \ -path '/net/*' -o \ -path '/sfs/*' -o \ -path '/tmp/*' -o \ -path '/udev/*' -o \ -path '/var/cache/*' -o \ -path '/var/lib/pacman/local/*' -o \ …
11 find  locate  updatedb 

2
จะค้นหาไฟล์ SUID / SGID ทั้งหมดได้อย่างไร?
Howtos ทั้งหมดที่ฉันพบในเว็บระบุว่า: Find all SUID files: find / -perm -4000 -print Find all SGID files: find / -perm -2000 -print แต่นั่นไม่เป็นความจริง ดู: $ ls -lah test -r-sr-xr-x 1 user user 0B Jan 24 22:47 test $ $ $ stat -x test | grep Mode Mode: (4555/-r-sr-xr-x) Uid: ( 1000/ user) …
11 find 

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