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

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

3
วิธีการส่งไฟล์ที่พบโดยหาเป็นข้อโต้แย้ง?
ก่อนอื่นให้ตัดคำตอบที่ไม่สำคัญ แต่ไม่เหมาะสม: ฉันสามารถใช้เคล็ดลับfind+ xargsหรือชุดรูปแบบ (เช่นเดียวfindกับ-exec) เพราะฉันต้องใช้การแสดงออกเช่นนี้ต่อการโทรเล็กน้อย ฉันจะกลับมาที่นี่ในตอนท้าย ตอนนี้เป็นตัวอย่างที่ดีกว่าลองพิจารณา: $ find -L some/dir -name \*.abc | sort some/dir/1.abc some/dir/2.abc some/dir/a space.abc ฉันจะส่งต่อสิ่งเหล่านี้เป็นอาร์กิวเมนต์ไปยังได้programอย่างไร เพียงทำมันไม่ได้ทำเคล็ดลับ $ ./program $(find -L some/dir -name \*.abc | sort) ล้มเหลวเนื่องจากprogramได้รับอาร์กิวเมนต์ดังนี้ [0]: ./program [1]: some/dir/1.abc [2]: some/dir/2.abc [3]: some/dir/a [4]: space.abc ดังที่เห็นได้เส้นทางที่มีช่องว่างถูกแยกออกและprogramพิจารณาว่าเป็นอาร์กิวเมนต์ที่ต่างกันสองรายการ อ้างถึงมันใช้งานได้ ดูเหมือนว่าผู้ใช้มือใหม่เช่นตัวฉันเองเมื่อเผชิญกับปัญหาดังกล่าวมักจะเพิ่มคำพูดแบบสุ่มจนกว่าจะได้ผลในที่สุด - เฉพาะที่นี่ดูเหมือนจะไม่ช่วย ... "$(…)" $ …

5
เหตุใดบางครั้งการค้นหาจึงจับคู่อาร์กิวเมนต์ของพา ธ บรรทัดคำสั่ง
บน Linux cd /tmp mkdir foo; cd foo ตอนนี้ทำงาน find . -name 'foo' ไม่ให้ผลลัพธ์ ในขณะที่วิ่ง find /tmp/foo -name 'foo' ให้ผลลัพธ์/tmp/fooที่ไม่สมเหตุสมผลกับฉัน มีใครอธิบายได้ไหม
9 find 

8
ลบไฟล์ทั้งหมดในไดเรกทอรีที่มีชื่อไม่ตรงกับบรรทัดในรายการไฟล์
ฉันมีไดเรกทอรีที่มีไฟล์มากกว่า 1,000 ไฟล์ ในไฟล์ข้อความฉันมีประมาณ 50 ชื่อไฟล์หนึ่งรายการต่อบรรทัด ฉันต้องการลบไฟล์ทั้งหมดในไดเรกทอรีที่ชื่อไฟล์ไม่สอดคล้องกับรายการในรายการ วิธีที่ดีที่สุดในการทำเช่นนี้คืออะไร? ฉันเริ่มเชลล์สคริปต์ แต่ไม่สามารถระบุคำสั่งที่เหมาะสมเพื่อกำหนดในชื่อไฟล์ที่อยู่ในรายการ ขอบคุณ
9 files  find 

6
ใช้ basename เพื่อวิเคราะห์รายการพา ธ ที่เก็บไว้ในไฟล์
ฉันใช้ Mac OSX และพยายามใช้บรรทัดคำสั่งเพื่อค้นหาจำนวนไฟล์ที่ฉันมีด้วยชื่อเดียวกัน ฉันพยายามใช้คำสั่งต่อไปนี้: find ~ -type f -name "*" -print | basename | sort | uniq -d > duplicate_files มันไม่ทำงาน! เมื่อฉันทำต่อไปนี้: find ~ -type f -name "*" -print > duplicate_files จากนั้น Duplicate_files จะมีพา ธ ของไฟล์ทั้งหมดของฉัน ดังนั้นฉันคิดว่าปัญหาเกิดขึ้นกับbasename- ไม่ยอมรับอินพุตมาตรฐาน ฉันลองทำสิ่งต่อไปนี้: basename $(find ~ -type f -name "*" -print) > duplicate_files …

2
ย้ายไฟล์ด้วย find + xargs: เป้าหมายไม่ใช่ไดเรกทอรีใช่หรือไม่
เมื่อฉันเรียกใช้คำสั่งต่อไปนี้: > mkdir some_dir > find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} some_dir ฉันได้รับหลายร้อยบรรทัดที่พูดว่า: mv: target `/foo/bar/XX.csv` is not a directory ทำไม? ฉันคิดว่า xargs จะทำงาน: mv /foo/barXX.csv some_dir สำหรับทุกไฟล์ที่findพบ เกิดอะไรขึ้น? โดยวิธีนี้เป็นกับ zsh ปรับปรุง: Update1: ฉันเหนื่อย: find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} -t some_dir …
9 find  xargs 

4
ผ่านหลายไดเรกทอรีไปยังตัวเลือก -prune ในการค้นหา
ฉันใช้findเพื่อค้นหาและลบไฟล์สำรองข้อมูล แต่ต้องการแยกไดเรกทอรีบางอย่างออกจากการค้นหา ชื่อไฟล์สำรองข้อมูลอาจยุติใน.bck, bak, หรือ~backup โค้ดตัวอย่างการทำงานขั้นต่ำ (MWE) ที่มีเพียงสามไดเรกทอรีที่ต้องแยกคือ: #! /bin/bash find . -type d \( -path "./.*" -o -path "./Music" -o -path "./Documents" \) -prune -o -type f \( -name "*.bck" -o -name "*.bak" -o -name "*~" -o -name "*.backup" \) -print0 | xargs -0 --no-run-if-empty trash-put \( -path "dir1" …

3
ค้นหาทั้งไฟล์และไดเรกทอรีปกติ
ฉันจะบอกได้อย่างไร (ถ้าฉันสามารถบอกได้!) ค้นหาไฟล์ทั้งในไดเรกทอรีและประเภทไฟล์? find -type fd มันเป็นเหมือนยุคมืดแห่งการแก้ปัญหาในที่นี่
9 find 

6
คำสั่ง UNIX - ค้นหา
ฉันพยายามเรียนรู้คำสั่ง UNIX และฉันเล่นเกมนี้เพื่อเรียนรู้และฉันติดอยู่ในขณะนี้ ฉันอยู่ในเซิร์ฟเวอร์ผ่าน ssh และไดเรกทอรีเต็มไปด้วยไฟล์และโฟลเดอร์สุ่มและรหัสผ่านสำหรับระดับถัดไปอยู่ในไฟล์ใดไฟล์หนึ่ง ฉันได้รับแจ้งว่าไฟล์ดังกล่าวมีคุณสมบัติต่อไปนี้: มนุษย์สามารถอ่านได้ 1033 ไบต์ ไม่สามารถทำงานได้ ฉันคาดเดาว่าฉันควรใช้findคำสั่งและฉันพยายามfind ! -executableแต่มันคืนไฟล์จำนวนมาก ความช่วยเหลือเดียวที่มนุษย์สามารถอ่านได้ที่ฉันพบได้ในคู่มือหรือออนไลน์คือการพิมพ์ขนาดไฟล์ที่มนุษย์อ่านได้ ดังนั้นฉันหายไปเล็กน้อยที่นั่น? ฉันก็ลองแล้วfind ~ -size 1033bแต่ก็ไม่ได้ทำอะไรเลย แต่เมื่อฉันลองfind ~ -size -1033bมันส่งคืนไฟล์ทุกไฟล์ในไดเรกทอรี

4
ทำรายการไฟล์ซ้ำด้วยชื่อไฟล์ชื่อโฟลเดอร์และการอนุญาต
มีอยู่ฉันสามารถแสดงรายการไฟล์โดยพิมพ์คำสั่งในเชลล์ที่แสดงชื่อไฟล์ชื่อโฟลเดอร์และการอนุญาตใน CentOS ทั้งหมดหรือไม่
9 files  permissions  find  ls 

4
ค้นหาไฟล์ที่มีชื่อเหมือนกัน แต่มีเนื้อหาต่างกันหรือไม่?
ฉันต้องการสร้างรายการไฟล์ที่มี: ชื่อเดียวกัน เนื้อหาที่แตกต่าง ในไดเรกทอรี (รวมถึงไดเรกทอรีลูกและเนื้อหาทั้งหมด) วิธีการทำ? ทุบตี Perl อะไรก็ได้ ดังนั้นไฟล์สองไฟล์ที่มีชื่อเหมือนกันและเนื้อหาเดียวกันไม่ควรแสดงขึ้นมา

2
คุณจะย้าย (หรือคัดลอก) ไฟล์ทั้งหมดไปยังไดเรกทอรีที่มีคำนำหน้าชื่อไฟล์ได้อย่างไร
ใช้ Bash ดังนั้นสมมติว่าฉันมีไฟล์หลายไฟล์วางอยู่ในไดเรกทอรีหลัก~/srcฉันต้องการคว้าไฟล์ทั้งหมดที่ตรงกับคำต่อท้ายและย้าย (หรือคัดลอก) ไปยัง~/distไดเรกทอรี สมมติว่าเพื่อจุดประสงค์นี้ว่าชื่อไฟล์ทั้งหมดมีแบบแผนการตั้งชื่อนี้: <filename_prefix>.<filename_suffix> ฉันพบว่านี่เป็นวิธีที่รวดเร็วในการรับไฟล์ทั้งหมดโดยเฉพาะfilename_suffixและวางไว้ในโฟลเดอร์ dist: mkdir ~/dst find source -name "*.xxx" -exec mv -i {} -t ~/dst \; ตอนนี้ขั้นตอนต่อไป ... ฉันจะใช้ผลลัพธ์การค้นหาในกรณีนี้filenameและใช้filename_prefixเพื่อสร้างไดเรกทอรีที่มีชื่อเดียวกัน~/distแล้วย้าย (หรือคัดลอก) ไฟล์ทั้งหมดที่มีคำนำหน้านั้นลงในไดเรกทอรีที่เหมาะสมได้อย่างไร mkdir ~/dst find source -name "*.xrt,*.ini,*.moo" -exec mv -i {} -t ~/dst \; โดยพื้นฐานแล้วฉันจะเปลี่ยนคำสั่งด้านบนได้อย่างไร (หรืออาจใช้คำสั่งอื่น) เพื่อสร้างโครงสร้างเช่นนี้ (ขาออก) ~/dist/people/people.xrt ~/dist/games/games.xrt ~/dist/games/games.moo ~/dist/games/games.ini ~/dist/monkeys/monkeys.ini ~/dist/monkeys/monkeys.xrt …

3
วิธีค้นหาไฟล์ในส่วนย่อยและจัดเรียงตามชื่อไฟล์ในคำสั่งเดียว?
ผลการค้นหาปกติที่ใช้find . ! -path "./build*" -name "*.txt": ./tool/001-sub.txt ./tool/000-main.txt ./zo/001-int.txt ./zo/id/002-and.txt ./as/002-mod.txt และเมื่อเรียงลำดับด้วยsort -n: ./as/002-mod.txt ./tool/000-main.txt ./tool/001-sub.txt ./zo/001-int.txt ./zo/id/002-and.txt อย่างไรก็ตามผลลัพธ์ที่ต้องการคือ: ./tool/000-main.txt ./zo/001-int.txt ./tool/001-sub.txt ./zo/id/002-and.txt ./as/002-mod.txt ซึ่งหมายความว่าผลลัพธ์จะถูกจัดเรียงตามชื่อไฟล์เท่านั้นแต่ควรรักษาข้อมูลโฟลเดอร์ไว้เป็นส่วนหนึ่งของผลลัพธ์ แก้ไข : ทำให้ตัวอย่างมีความซับซ้อนมากขึ้นเนื่องจากโครงสร้างไดเรกทอรีย่อยอาจมีมากกว่าหนึ่งระดับ
9 find  filenames  sort 

6
ฉันจะค้นหาไฟล์ที่หายไปจากรายการได้อย่างไร
ฉันมีรายการไฟล์ที่ฉันต้องการตรวจสอบว่ามีอยู่ในระบบไฟล์ของฉันหรือไม่ ฉันคิดว่าทำสิ่งนี้โดยใช้findใน: for f in $(cat file_list); do find . -name $f > /dev/null || print $f done (ใช้zsh) แต่วิธีนี้ใช้ไม่ได้ผลเนื่องจากfindดูเหมือนว่าจะออกจาก0หรือไม่พบไฟล์ ฉันเดาว่าฉันสามารถผ่านการทดสอบอื่น ๆ ซึ่งการทดสอบเพื่อดูว่าfindผลิตผลใด ๆ (ดิบ แต่มีประสิทธิภาพจะแทนที่> /dev/nullด้วย|grep '') แต่รู้สึกเหมือนใช้โทรลล์เพื่อจับแพะ (เชื้อชาติอื่น ๆ อาจพูดอะไรเกี่ยวกับ ) มีวิธีที่จะบีบบังคับfindให้มูลค่าการออกที่เป็นประโยชน์หรือไม่? หรืออย่างน้อยก็เพื่อรับรายการไฟล์ที่ไม่พบ? (ฉันสามารถจินตนาการได้ว่าบางทีอาจจะง่ายกว่านี้ด้วยตัวเลือกที่ชาญฉลาดของการเชื่อมต่อแบบลอจิคัล แต่ฉันดูเหมือนจะผูกปมเสมอเมื่อฉันพยายามคิดออก) ความเป็นมา / แรงจูงใจ:ฉันมีข้อมูลสำรอง "หลัก" และฉันต้องการตรวจสอบว่ามีไฟล์บางไฟล์ในเครื่องท้องถิ่นของฉันอยู่ในข้อมูลสำรองหลักของฉันก่อนที่จะลบออก (เพื่อสร้างพื้นที่ว่างเล็กน้อย) ดังนั้นฉันจึงสร้างรายชื่อไฟล์sshแก้ไขมันไปยังเครื่องต้นแบบและจากนั้นก็เกิดความสูญเสียในการหาวิธีที่ดีที่สุดในการค้นหาไฟล์ที่หายไป
9 find 

3
ส่งอาร์กิวเมนต์ xargs เป็นสตริงไปยังคำสั่งอื่นด้วย '>'
/tmp/สมมติว่าฉันมีพวงของไฟล์ใน ฉันทำ find . -type f | xargs -iFILES และฉันต้องการที่จะทำmd5sumในแต่ละไฟล์ส่งออกไปยังไฟล์ที่มีชื่อเดียวกัน แต่มี.md5นามสกุล find . -type f | xargs -iFILES md5sum FILES > FILES.md5 นี่ควรจะสร้างไฟล์ md5 สำหรับแต่ละไฟล์ที่พบโดยคำสั่ง find แต่จะสร้างไฟล์ FILES.md5 ไฟล์เดียวบนดิสก์ที่มี checksums จากไฟล์ทั้งหมด ฉันจะบอกคำสั่ง md5sum ได้อย่างไรว่า FILES เป็นตัวแทนของชื่อไฟล์ปัจจุบันและไม่ใช่สตริงตัวอักษร FILES

1
ค้นหาความขัดแย้งในการเรียงลำดับ + -printf +?
ฉันต้องผ่านรายการเรียงลำดับชื่อไฟล์ FLAC ที่ยกมาให้ SoX สำหรับการต่อข้อมูล แต่ฉันมีปัญหาในการเรียงลำดับเพื่อทำงานตามที่ฉันคาดหวัง ถ้าฉันใช้: find . -maxdepth 1 -type f -iname "*.flac" | sort ฉันได้สิ่งที่ฉันคาดหวัง: ./01-Lordy.flac ./02-Both Sides Now.flac ./03-Solitary Man.flac ./04-Holly Holy.flac ./05-Cherry Cherry.flac ./06-Kentucky Woman.flac ./07-Sweet Caroline.flac ./08-Thank the Lord for the Nightime.flac ./09-And the Singer Sings His Song.flac ./10-Brother Loves Traveling Salvation Show.flac อย่างไรก็ตามฉันไม่สามารถใช้สิ่งนั้นกับสิ่งที่ฉันทำเพราะฉันต้องการรายชื่อที่เสนอโดยไม่มีบรรทัดใหม่ …
find  sort  printf 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.