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

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

2
ฉันจะพิมพ์เนื้อหาแทนชื่อไฟล์โดยใช้คำสั่ง linux find ได้อย่างไร
ฉันมีหลายพันไฟล์ UNL cbs_cdr_vou_20180624_603_126_239457.unlชื่ออะไรเช่นนี้ ฉันต้องการพิมพ์ทุกบรรทัดจากไฟล์เหล่านั้นโดยใช้คำสั่งต่อไปนี้ แต่มันให้ฉันชื่อไฟล์เท่านั้น ฉันไม่ต้องการชื่อไฟล์ฉันแค่ต้องการเนื้อหาจากไฟล์เหล่านั้น find -type f -name 'cbs_cdr_vou_20180615*.unl' > /home/fifa/cbs/test.txt กระแสไฟขาออก: ./cbs_cdr_vou_20180615_603_129_152023.unl ./cbs_cdr_vou_20180615_603_128_219001.unl ./cbs_cdr_vou_20180615_602_113_215712.unl ./cbs_cdr_vou_20180615_602_120_160466.unl ./cbs_cdr_vou_20180615_603_125_174428.unl ./cbs_cdr_vou_20180615_601_101_152369.unl ./cbs_cdr_vou_20180615_603_133_193306.unl ผลลัพธ์ที่คาดหวัง: 8801865252020|200200|20180613100325|; 8801837463298|200200|20180613111209|; 8801845136955|200200|20180613133708|; 8801845205889|200200|20180613141140|; 8801837612072|200200|20180613141525|; 8801877103875|200200|20180613183008|; 8801877167964|200200|20180613191607|; 8801845437651|200200|20180613200415|; 8801845437651|200200|20180613221625|; 8801839460670|200200|20180613235936|; โปรดทราบว่าสำหรับคำสั่ง cat ฉันได้รับข้อผิดพลาดแบบ-bash: /bin/logger: Argument list too longนั้นเป็นเหตุผลที่ต้องการใช้findแทนcatคำสั่ง
10 linux  find  cat 

2
มีทางเลือกอื่นสำหรับคำสั่ง `find 'บน linux สำหรับ SunOS หรือไม่?
findคำสั่งบนลินุกซ์มีตัวเลือกมากเมื่อเทียบกับfindคำสั่งบน SunOS หรือ Solaris ฉันต้องการใช้findคำสั่งเช่นนี้: find data/ -type f -name "temp*" -printf "%TY-%Tm-%Td %f\n" | sort -r มันทำงานได้ดีอย่างสมบูรณ์บนเครื่อง Linux แต่คำสั่งเดียวกันไม่มีตัวเลือก-printfในเครื่อง SunOS ฉันต้องการปรับแต่งผลงานของฉันใน"%TY-%Tm-%Td %f\n"รูปแบบ โปรดแนะนำทางเลือกใด ๆ สำหรับ SunOS

4
ค้นหาคำสั่งแจกแจงเอาต์พุตและอนุญาตการเลือก?
เมื่อฉันใช้findมักจะพบผลลัพธ์หลายรายการเช่น find -name pom.xml ./projectA/pom.xml ./projectB/pom.xml ./projectC/pom.xml ฉันมักจะต้องการเลือกเฉพาะผลลัพธ์ที่เฉพาะเจาะจง (เช่นedit ./projectB/pom.xml) มีวิธีในการแจกแจงfindเอาต์พุตและเลือกไฟล์ที่จะส่งผ่านไปยังแอปพลิเคชันอื่นหรือไม่? ชอบ: find <print line nums?> -name pom.xml 1 ./projectA/pom.xml 2 ./projectB/pom.xml 3 ./projectC/pom.xml !! | <get 2nd entry> | xargs myEditor ? [แก้ไข] ฉันได้ชนกับเพอร์คิวลีอาร์ดบางตัวด้วยวิธีแก้ปัญหาบางอย่างที่กล่าวถึง ดังนั้นฉันต้องการอธิบายขั้นตอนในการทำซ้ำ: git clone http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.git cd eclipse.platform.swt.git <now try looking for 'pom.xml' and 'feature.xml' files> [แก้ไข] …
10 bash  files  find 

2
ในคำสั่ง `sudo find` ฉันจะแน่ใจได้อย่างไรว่าคำสั่ง` -exec` ถูกรันเหมือนผู้ใช้ปกติ?
ฉันกำลังพยายามทำให้คำสั่งต่อไปนี้ทำงานในลักษณะที่process_pathsสคริปต์ไม่ได้ทำงานภายใต้สิทธิ์ระดับสูง มีวิธีทำเช่นนี้หรือไม่? sudo find /path/ -exec process_paths '{}' \+ ที่นี่/path/มีไฟล์บางไฟล์ที่ไม่มีสิทธิ์อ่านสำหรับผู้ใช้ปกติ สคริปต์process_pathsเพียงต้องการเส้นทาง
10 find  sudo  su 

5
ค้นหา | xargs shasum สร้างการตรวจสอบของไฟล์ checksum เอง (ก่อนกำหนด) และล้มเหลวเมื่อตรวจสอบ
ปัญหาของฉัน (ในสคริปต์ด้วย#!/bin/sh) มีดังนี้: ฉันพยายามตรวจสอบไฟล์ทั้งหมดในไดเรกทอรีเพื่อการเก็บถาวร ไฟล์ checksum (ในกรณีของฉัน sha1) ที่มีชื่อไฟล์ทั้งหมดควรอยู่ในไดเรกทอรีเดียวกัน ช่วยบอกว่าเรามีไดเรกทอรี~/testพร้อมไฟล์f1และf2: mkdir ~/test cd ~/test echo "hello" > f1 echo "world" > f2 ตอนนี้กำลังคำนวณ checksums ด้วย find -maxdepth 1 -type f -printf '%P\n' | xargs shasum ทำตามที่ฉันต้องการทุกอย่างแสดงรายการไฟล์ทั้งหมดของไดเรกทอรีปัจจุบันเท่านั้นและคำนวณผลรวม sha1 (maxdepth อาจเปลี่ยนแปลงได้ในภายหลัง) เอาต์พุตบน STDOUT คือ: f572d396fae9206628714fb2ce00f72e94f2258f f1 9591818c07e900db7e1e0bc4b884c945e6a61b24 f2 น่าเสียดายที่เมื่อพยายามบันทึกไฟล์ลงในไฟล์ด้วย find -maxdepth 1 …
10 find  xargs  checksum  hashsum 

3
ค้นหาไฟล์ที่ลงท้ายด้วยตัวเลข
ฉันกำลังพยายามสร้างสคริปต์สำรองในขณะที่ล็อกไฟล์มีขนาดใหญ่ขึ้นเรื่อย ๆ สิ่งที่ฉันมีคือจัดการไฟล์ปัจจุบัน (เช่นsecureไฟล์ใน/var/log/) และลบเนื้อหาออกจากไฟล์นั้น แต่มีบางไฟล์ที่มีชื่อเช่นนี้secure.1, secure.2และทั้งหมดนี้ผมชอบที่จะนับพวกเขาและถ้าตัวเลขเป็นใหญ่แล้ว2จะเก็บพวกเขาทั้งหมด ฉันไม่พบวิธีการค้นหาไฟล์นี้หรือนับพวกเขา ความคิดแรกที่เกิดขึ้นกับฉันคือ: find /var/log/ -name *.1 | wc -l และสิ่งนี้จะพิมพ์เสมอ1เนื่องจากมีไฟล์secure.1เดียว ฉันจะนับเช่นเดียวกับในการวนรอบที่ฉันสามารถระบุช่วงของจำนวนเช่น{1..5}หรือคล้ายกันได้ มีวิธีการแยกไฟล์นี้และทำให้พวกเขาเป็นหนึ่งและพวกเขาสำรองหรือลบหรือสิ่งที่เคย ... หรือก่อนอื่นฉันจะหาหมายเลขทั้งหมดนี้ที่ลงท้ายด้วยหมายเลข

1
จะค้นหาไฟล์ที่มีบรรทัดใหม่ในชื่อไฟล์ได้อย่างไร
ฉันพยายามค้นหาไฟล์ที่มีบรรทัดใหม่ในชื่อไฟล์ แต่ฉันไม่สามารถคิดได้ว่าจะใช้รูปแบบใด ผลงานดังต่อไปนี้ แต่ไม่มีประโยชน์มากถ้าฉันต้องการใช้ในโค้ดที่เยื้อง find . -name '* *' ฉันลองสองสิ่งนี้และพวกเขาประสบความสำเร็จในการค้นหาชื่อไฟล์ที่มีตัวอักษรn : find . -name '*\n*' find . -name "*\n*" จากนั้นฉันก็พบวิธีเขียนลำดับ backslash escape และลองสิ่งนี้: find . -name "*$'\n'*" แต่นั่นไม่พบอะไรเลย ฉันจะเขียนรูปแบบได้อย่างไร
10 shell  find  patterns 

4
ฉันจะค้นหาติดตามได้อย่างไรส่วนใหญ่ แต่ไม่ทั้งหมดลิงก์สัญลักษณ์?
ระบบปฏิบัติการและโฮมไดเรกทอรีของฉันอยู่ใน SSD ฉันเก็บไฟล์ขนาดใหญ่ไว้ในฮาร์ดดิสก์และ symlink จากโฮมไดเร็กตอรี่ของฉันไปยังฮาร์ดดิสก์ (เช่น. ~ / Videos / Films เป็น symlink ไปยัง / mnt / hdd / Films) ฉันยังมีหมายเลขนำหน้าจำนวนไวน์ซึ่งแต่ละอันมี dosdevices / z: symlinked to / ดังนั้นถ้าฉันใช้ find โดยไม่มี -L มันจะพลาดทุกอย่างที่อยู่ในฮาร์ดดิสก์ แต่ถ้าฉันใช้ find ด้วย -L ​​มันจะสิ้นสุดในลูปเนื่องจาก symlink ของไวน์เป็น / มีวิธีที่เหมาะสมในการแก้ไขปัญหานี้เพื่อค้นหาสิ่งที่ฉันต้องการหรือไม่ อย่างสังหรณ์ใจฉันต้องการบางสิ่งบางอย่างตามแนวของ "ติดตาม symlinks ยกเว้นว่าพวกเขาอยู่ภายใต้ไดเรกทอรีที่เรียกว่า dosdevices" "ติดตาม symlink ที่อยู่บนฮาร์ดดิสก์" ก็ใช้ได้เช่นกัน
10 find  symlink 

4
วิธีใช้ wc และ piping เพื่อค้นหาว่ามีไฟล์และไดเรคทอรีจำนวนเท่าใดในไดเรกทอรีหนึ่ง
ฉันจะใช้ตัวนับคำ ( wc) และการไพพ์เพื่อนับจำนวนไฟล์หรือไดเรกทอรีที่อยู่ใน/usr/binไดเรกทอรีได้อย่างไร

2
ค้นหา / ls แคช
ดูเหมือนว่าครั้งแรกที่ฉันเรียกใช้findหรือlsในไดเรกทอรีมันใช้เวลาสักครู่ในการทำงาน แต่ทุกครั้งหลังจากนั้นจะรวดเร็วราวกับว่ารายการเนื้อหาของไดเรกทอรีถูกแคชหรือจัดทำดัชนีไว้ที่ใดที่หนึ่ง มีวิธีในการเก็บแคชนี้ไว้ระหว่างการรีบูตเครื่องคอมพิวเตอร์หรือไม่?
10 find  ls  cache 

2
จัดการชื่อไฟล์ piped จากคำสั่ง find
ฉันค่อนข้างใหม่กับ Bash และฉันพยายามทำบางสิ่งที่บนพื้นผิวนั้นค่อนข้างตรงไปตรงมา - ลองค้นหาลำดับชั้นของไดเรกทอรีเพื่อรับไฟล์ * .wma ทั้งหมดไปป์ที่เอาต์พุตไปยังคำสั่งที่ฉันแปลงเป็น mp3 และ บันทึกไฟล์ที่แปลงเป็น. mp3 ฉันคิดว่าคำสั่งควรมีลักษณะดังต่อไปนี้ (ฉันได้ละทิ้งคำสั่งการแปลงเสียงและฉันใช้ echo แทนภาพประกอบ): $ find ./ -name '*.wma' -type f -print0 | xargs -0 -I f echo ${f%.*}.mp3 ตามที่ฉันเข้าใจแล้ว -print0 arg จะให้ฉันจัดการกับชื่อไฟล์ที่มีช่องว่าง ฉันคาดหวังว่า (เนื่องจาก xargs) ว่าแต่ละพา ธ ไฟล์จาก find ถูกดักจับใน f และการใช้ซับสตริงจับคู่ / ลบจากจุดสิ้นสุดของสตริงนั้นฉันควรจะสะท้อนพา ธ ไฟล์ดั้งเดิมด้วย mp3 …

1
มีเอาต์พุตน้อยลงเมื่อใช้ตัวเลือก print0 เมื่อค้นหาใช่ไหม
ฉันได้อ่าน man page และข้อมูลอ้างอิงอื่น ๆ แล้ว แต่ฉันยังสับสนกับพฤติกรรมการค้นหาพร้อม-print0ตัวเลือก -print0 This primary always evaluates to true. It prints the pathname of the current file to standard output, followed by an ASCII NUL character (character code 0). คำสั่งแรก: $ find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" 2> /dev/null /some/path//asdf199Intro-5kqlw.jpeg /some/path/199intro-2jjaj.JPEG /some/path/199intro-3.jpg /some/path/wuer199intro-4.JPG /some/path/xbzf199INTRO-1.jpg …
10 find 

4
วิธีค้นหาไฟล์ในระบบไฟล์จากบรรทัดคำสั่ง?
ฉันต้องการค้นหาไฟล์ (ที่มีชื่อไฟล์ที่รู้จักกันบางส่วน) อยู่ในระบบไฟล์ ฉันต้องการทราบวิธีการทำสิ่งนี้จากบรรทัดคำสั่งแทนที่จะใช้ยูทิลิตี GUI ใน Windows ฉันจะเรียกใช้สิ่งต่อไปนี้: cd /d C:\ dir *filename* /s Linux มีอะไรเทียบเท่า
10 ubuntu  find  ls  locate 

1
Solaris เทียบเท่ากับความลึก / พรุน?
ฉันพยายามค้นหาบางไฟล์ภายในไดเรกทอรี โดยค่าเริ่มต้นการค้นหาcommandคือการค้นหาไดเรกทอรีที่ฉันได้ระบุไว้และเป็นไดเรกทอรีย่อย ผมพยายามที่จะใช้depth/maxdepthและpruneแต่ไม่มีอะไรช่วยในการเอาชนะนี้ ใครสามารถชี้วิธีที่ถูกต้องในการใช้ความลึก / พรุนใน Solaris ได้หรือไม่? รหัสของฉันมีลักษณะเช่นนี้: find file_path -depth 1 -name '*.log' ฉันได้รับข้อผิดพลาดต่อไปนี้: find: bad option 1 find: [-H | -L] path-list predicate-list
10 find  solaris 

1
ทำไมคำสั่ง regex บางคำจึงมีคำว่า '\' ตรงข้ามกับอักขระต่าง ๆ ?
ยกตัวอย่างเช่นคำสั่งนี้: find . -regex ".*\.\(cpp\|h\)" นี่จะค้นหาไฟล์. h และ. cpp ทั้งหมดในไดเรกทอรีของคุณ อักขระระยะเวลา '.' ในการแสดงออกปกติมักจะหมายถึง "ตัวละครใด ๆ " เพื่อให้ตรงกับช่วงเวลาจริงคุณต้องหลบหนีโดยใช้เครื่องหมายแบ็กสแลช '\' ในกรณีนี้ให้ตัวละครที่มีความหมายพิเศษคุณต้องหลบหนีเพื่อให้ได้ตัวละครที่แท้จริงที่มันหมายถึง ตอนนี้ใช้วงเล็บและแถบ "หรือ" เป็นอักขระ '(', ')' และ '|' ตามลำดับ สิ่งเหล่านี้มีความหมายพิเศษซึ่งใช้สำหรับจัดกลุ่มนิพจน์ทั่วไป อย่างไรก็ตามเพื่อให้ได้ความหมายพิเศษตัวละครจะต้องถูกหลบหนีโดยใช้เครื่องหมายทับขวา! หากไม่มีเครื่องหมายแบ็กสแลชอักขระจะมีความหมายของอักขระจริงที่แสดงถึง ทำไม '.' ถือว่าแตกต่างจาก '(', ')' และ '|'?

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