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

Globbing หมายถึงการจับคู่ไฟล์ตามรูปแบบชื่อที่มีอักขระตัวแทน


4
ข้อผิดพลาดสคริปต์ทุบตีกับสตริงที่มีเส้นทางที่มีช่องว่างและสัญลักษณ์
ฉันมีปัญหาในการเข้าใจพื้นฐานของการเขียนสคริปต์ Bash นี่คือสิ่งที่ฉันมี: #!/bin/bash FILES="/home/john/my directory/*.txt" for f in "${FILES}" do echo "${f}" done สิ่งที่ฉันต้องการทำคือรายการ.txtไฟล์ทั้งหมดในforลูปเพื่อให้ฉันสามารถทำสิ่งกับพวกเขา แต่พื้นที่ในmy directoryและเครื่องหมายดอกจันใน*.txtเพียงไม่เล่นอย่าง ฉันลองใช้มันโดยไม่ใส่เครื่องหมายอัญประกาศคู่โดยมีและไม่มีเครื่องหมายปีกกาบนชื่อตัวแปรและยังไม่สามารถพิมพ์.txtไฟล์ทั้งหมดได้ นี่เป็นสิ่งพื้นฐานมาก แต่ฉันยังคงดิ้นรนเพราะฉันเหนื่อยและคิดไม่ออก ผมทำอะไรผิดหรือเปล่า? ฉันสามารถใช้สคริปต์ด้านบนได้สำเร็จหากไฟล์ของฉันไม่มีที่ว่างหรือเครื่องหมายดอกจัน ... ฉันต้องทำการทดสอบว่ามีหรือไม่มีการใช้เครื่องหมายคำพูดคู่และเครื่องหมายปีกกาเพื่อให้มันทำงานได้หรือไม่ แต่ช่วงเวลาที่ฉันมีทั้งช่องว่างและดอกจันมันทำให้ทุกอย่างยุ่ง


1
เหตุใดอักขระตัวแทนที่ไม่มีเครื่องหมายในการทำงานระยะไกลจึงใช้ scp
ฉันพิมพ์สิ่งนี้ใน Bash: scp user@remote:~/dir/*.xml . และใช้งานได้รับไฟล์ทั้งหมดที่สร้างไวด์การ์ดบนเซิร์ฟเวอร์ระยะไกล แต่ทำไมถึงใช้งานได้? scpผมคิดว่าทุบตีขยายนิพจน์ตัวแทนในการขัดแย้งก่อนที่จะกลายเป็นข้อโต้แย้งที่มองเห็นเครื่องมือเช่น
24 bash  shell  wildcards 

2
ช่วงหลายช่วงของไฟล์ตามลำดับคำใน zsh
ฉันต้องการระบุช่วงของไฟล์ (ตามลำดับพจนานุกรม) ด้วยจำนวนเต็มสองจำนวน (เช่น 2 ถึง 57) ใน zsh โดยการวนรอบ ตัวอย่างเช่น: "เลือกไฟล์ 2 ถึง 57 ตามลำดับคำศัพท์ภายใต้พา ธ ที่ตรงกับรูปแบบการวนลูป ฉันคิดว่าการใช้วงเล็บเหลี่ยมจะทำได้ for x in /foo/bar/*[2-57]; do print $x; done แต่เห็นได้ชัดว่า zsh คิดว่าฉันขอไฟล์2ไป5(หรือสิ่งที่ต้องการ) แทนไฟล์ไป2 57ความคิดใด ๆ ฉันจะทำสิ่งนี้ได้อย่างไร
24 zsh  wildcards 

4
วิธีรับสตริงว่างจากรูปแบบ glob แบบไม่มีการโต้ตอบ
ว่าฉันมีโฟลเดอร์ที่มีสามไฟล์: foo1 foo2 bar 1. ถ้าฉันวิ่ง list_of_files=$(print foo*) echo $list_of_files ฉันเข้าใจ: foo1 foo2 2.ถ้าฉันวิ่ง list_of_files=$(print bar*) echo $list_of_files ฉันเข้าใจ: bar 3.อย่างไรก็ตามถ้าฉันวิ่ง list_of_files=$(print other*) echo $list_of_files ฉันได้รับ: zsh: no matches found: other*(ตัวแปร$list_of_filesว่างเปล่าแม้ว่า) มีวิธีที่จะขอให้ zsh ไม่บ่นถ้ามันไม่ตรงกับการขยายตัวของ glob? เป้าหมายของฉันคือการใช้กลไกดังกล่าวข้างต้นไปอย่างเงียบ ๆเก็บรวบรวมรายชื่อของไฟล์ที่ตรงกับรูปแบบ glob ที่กำหนด
24 zsh  wildcards 

2
ลบไฟล์ทั้งหมดที่เริ่มต้นด้วยเครื่องหมายคำถาม
ฉันมีโฟลเดอร์ที่มีไฟล์ประมาณ 4k ไฟล์เหล่านี้บางไฟล์เริ่มต้นด้วย aa ?หรือ!ตัวอักษร ฉันต้องการลบ แต่ไม่สามารถหานิพจน์ที่จะทำ: rm -f ./?* เพียงลบทุกอย่าง ฉันสามารถใช้grepls และไปป์xargsและย้ายไฟล์ไปยังโฟลเดอร์อื่น แต่ฉันหวังว่าจะมีวิธีที่เหมาะสมในการทำเช่นนี้ ต้องการความช่วยเหลือทั้งใน?และ!ไฟล์

1
รูปแบบ. gitignore เทียบเท่ากับ regex (ใหญ่ | เล็ก) (รัฐ | เมือง) - [0-9] * \. csv
ฉันมี regex ฉันติดอยู่ในของฉัน.gitignoreคล้ายกับ: (Big|Small)(State|City)-[0-9]*\.csv มันไม่ได้ทำงานเพื่อให้ผมทดสอบกับRegexLab.NET จากนั้นผมก็พบgitignoreหน้าคนที่ทำให้ฉันได้เรียนรู้ว่า gitignore ไม่ได้ใช้ regexes แต่fnmatch (3) อย่างไรก็ตาม fnmatch มันดูเหมือนจะไม่เท่ากับกลุ่มจับภาพ สิ่งนี้เป็นไปได้หรือฉันต้องการแบ่งเป็นสามบรรทัด?

2
คัดลอกไฟล์ที่มีนามสกุลหลาย ๆ ตัว
ฉันต้องการคัดลอกไฟล์ที่มีหลายนามสกุลไปยังไดเรกทอรีปลายทางเดียว ตัวอย่างเช่นฉันสามารถใช้คำสั่งต่อไปนี้เพื่อคัดลอกไฟล์. txtทั้งหมดในไดเรกทอรีทำงานไปยังไดเรกทอรีที่เรียกว่าdestination: cp -v *.txt destination/ และฉันสามารถใช้สิ่งต่อไปนี้เพื่อคัดลอกไดเรกทอรี. pngทั้งหมดในไดเรกทอรีทำงานไปที่destination: cp -v *.png destination/ แต่ใช้เวลานานในการพิมพ์คำสั่งเหล่านี้เป็นคำสั่งแยกต่างหาก (แม้จะใช้ประวัติคำสั่ง) ดังนั้นจะมีวิธีการที่ผมสามารถบอกได้ใด ๆcpในการคัดลอกไฟล์ที่มีทั้งรูปแบบ*.txt หรือรูปแบบ*.pngที่จะdestination? จะเป็นการดีที่ฉันต้องการที่จะสามารถระบุมากกว่าสองรูปแบบที่ชอบ - สอนcpการคัดลอกทั้งหมด*.txt หรือ *.png หรือ *.jpgไฟล์ไปdestinationยกตัวอย่างเช่น ฉันแน่ใจว่าทั้งหมดนี้เป็นไปได้โดยใช้เชลล์สคริปต์ - ฉันใช้bash- แต่มีวิธีใดที่จะทำให้สำเร็จได้ง่ายขึ้นเพียงจากคอนโซลหรือไม่ ฉันจะใช้การขยายรั้งเพื่อทำมันได้หรือไม่? ฉันรู้ว่ามันเป็นไปได้ที่จะคัดลอกไฟล์ทั้งหมดในไดเรกทอรีการทำงานยกเว้นที่ตรงกับรูปแบบที่ระบุบางอย่างแต่เนื่องจากไดเรกทอรีการทำงานของฉันมีนามสกุลไฟล์มากกว่าที่ฉันไม่ต้องการคัดลอกกว่าที่ฉันทำซึ่งจะเป็นความเจ็บปวด คุณมีความคิดเกี่ยวกับสิ่งนี้หรือไม่?
22 bash  shell  wildcards  cp 

3
อะไร. ?? * หมายถึงคำสั่ง shell?
ต่อไปนี้คำสั่งจะtarทุกคน "จุด" ไฟล์และโฟลเดอร์: tar -zcvf dotfiles.tar.gz .??* ผมคุ้นเคยกับการแสดงออกปกติ.??*แต่ฉันไม่เข้าใจวิธีการตีความ ฉันดำเนินการls .??*และtree .??*ดูไฟล์ที่อยู่ในรายการ เหตุใดนิพจน์ทั่วไปนี้จึงรวมไฟล์ทั้งหมดภายในโฟลเดอร์ที่ขึ้นต้นด้วย.ตัวอย่าง
22 wildcards  tar 

1
วิธีการดาวน์โหลดไฟล์เฉพาะจากบางเส้นทางด้วย wget
หากฉันไม่ต้องการดาวน์โหลดไฟล์ที่พบในพา ธ URL เฉพาะด้วยตนเองฉันจะมีตัวเลือกอะไรบ้าง การใช้ไวลด์การ์ดล้มเหลว: $ wget 'http://www.shinken-monitoring.org/pub/debian/*deb' Warning: wildcards not supported in HTTP. .... แน่นอนว่าฉันไม่รู้จักชื่อไฟล์ล่วงหน้า
22 wildcards  wget 

2
วิธีกำจัด "ไม่พบที่ตรงกัน" เมื่อเรียกใช้ "rm *"
ใช้zshฉันได้รับข้อความ "ไม่พบการจับคู่" เมื่อเลือกรูปแบบที่ไม่เหมาะสมrmและแม้เมื่อเปลี่ยนเส้นทางผลลัพธ์ # rm * > /dev/zero 2>&1 zsh: no matches found: * ฉันจะกำจัดข้อความนี้ได้อย่างไร
22 zsh  wildcards  rm 

1
เหตุใด 'ไม่พบ' แสดงไฟล์นี้
ใช้findกับgrepหนึ่งสามารถค้นหาไฟล์ที่ตรงกับรูปแบบ: # find | grep error ./solr-modifiedSolr4/SolrPhpClient/phpdocs/errors.html ./error_log ./includes/classes/error_log อย่างไรก็ตามการใช้findเพียงไฟล์เดียวไม่พบ: # find . -name error* ./error_log ./includes/classes/error_log ทำไมไม่findค้นหาerrors.htmlไฟล์เมื่อไม่ได้ใช้กับgrep? วิธีfindใช้ในการแสดงไฟล์นี้เช่นกัน?

5
วิธีจับคู่ * กับไฟล์ที่ซ่อนอยู่ในไดเรกทอรี
วิธีจับคู่ไฟล์ที่ซ่อนอยู่ในไดเรกทอรีที่กำหนด ตัวอย่างเช่น ถ้าฉันให้คำสั่งด้านล่างมันไม่ได้ให้ผลลัพธ์ของไฟล์ที่ซ่อนอยู่ du -b maybehere*/* วิธีการทำให้ง่าย ๆ นี้โดยใช้คำสั่งเดียวแทนที่จะใช้ du -b maybehere*/.* maybehere*/* เพราะฉันต้องพิมพ์บางทีสองครั้ง

6
วิธีย้ายไฟล์ x ไฟล์แรก
ฉันมีโฟลเดอร์ใหญ่นี้ที่มีไฟล์เรียงลำดับหลายพันไฟล์ เป็นไปได้ไหมที่จะย้าย 5000s แรกไปยังโฟลเดอร์ย่อยผ่านmvคำสั่ง? ตอนนี้ฉันย้ายไฟล์ด้วย mv *some_pattern* ./subfolder1/ สำหรับตอนนี้ฉันย้ายภาพไปมาโดยการสุ่มมันไม่สำคัญจริงๆถ้ามีไฟล์ไม่ถึง 5,000 ไฟล์ในแต่ละโฟลเดอร์ย่อย มีวิธีที่ดีกว่าที่จะทำหรือไม่

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