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

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

6
ฉันจะได้แมตช์แรกจากการขยายไวด์การ์ดได้อย่างไร
เชลล์เช่น Bash และ Zsh ขยาย wildcard เป็นอาร์กิวเมนต์โดยมีอาร์กิวเมนต์มากที่สุดเท่าที่ตรงกับรูปแบบ: $ echo *.txt 1.txt 2.txt 3.txt แต่ถ้าฉันต้องการให้การแข่งขันนัดแรกกลับมาไม่ใช่การแข่งขันทั้งหมด? $ echo *.txt 1.txt ฉันไม่สนใจวิธีแก้ปัญหาเฉพาะเชลล์ แต่ฉันต้องการโซลูชันที่ทำงานร่วมกับช่องว่างในชื่อไฟล์
36 shell  wildcards 

4
ความแตกต่างระหว่าง [0-9], [[: digit:]] และ \ d
ในบทความวิกิพีเดียนิพจน์ปกติมันก็ดูเหมือนว่า[[:digit:]]= = [0-9]\d สถานการณ์อะไรบ้างที่พวกเขาไม่เท่ากัน? อะไรคือความแตกต่าง? หลังจากการวิจัยบางอย่างฉันคิดว่าความแตกต่างอย่างหนึ่งคือการแสดงออกของวงเล็บปีกกา[:expr:]ขึ้นอยู่กับสถานที่

3
อะไรคือความแตกต่างระหว่าง [[$ a == z *]] และ [$ a == z *]
มีความแตกต่างระหว่างสองสิ่งนี้หรือไม่ [[ $a == z* ]] และ [ $a == z* ] ฉันสามารถมีตัวอย่างที่พวกเขาจะมีผลลัพธ์ที่แตกต่างกันหรือไม่ นอกจากนี้การทำงานของ[[ ]]แตกต่างกัน[ ]อย่างไร

10
ฉันจะสร้างไดเรกทอรีในไดเรกทอรีย่อยทั้งหมดได้อย่างไร
สมมติว่าฉันมีโครงสร้างไดเรกทอรีเช่นนี้ $ [~ / ฝึก] ls เอบีซีดี/ ตอนนี้ฉันต้องการสร้างไดเรกทอรีtmp1ในไดเรกทอรีย่อยทั้งหมดpracticeและฉันทำสิ่งนี้: $ [~ / ฝึก] mkdir * / tmp1 mkdir: ไม่สามารถสร้างไดเรกทอรี `* / tmp1 ': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว จากนั้นฉันลอง-pสวิตช์และจบด้วยไดเรกทอรีที่*มีไดเรกทอรีย่อยtmp1 $ [~ / ฝึก] mkdir -p * / tmp1 $ [~ / ฝึก] ls */ เอบีซีดี/ ฉันรู้ว่าการใช้-pสวิตช์คือการสร้างไดเรกทอรีที่ไม่มีอยู่หลายรายการ ฉันแค่คิดว่ามันอาจช่วย ฉันจะสร้างtmp1ในไดเรกทอรีย่อยทั้งหมดได้ในครั้งเดียวได้อย่างไร หากสามารถทำได้ฉันจะขยายไปยังการสร้าง\tmp1, \tmp2, \tmp3ใน\a, \bและ\cในครั้งเดียว? แก้ไข:ฉันพลาดการกล่าวขวัญว่าไดเรกทอรีที่ไม่จำเป็นต้องเป็นที่เรียบง่ายและในการสั่งซื้อเช่นa, b, cฯลฯ …


1
สัญลักษณ์แทนภายในคำพูด
นี่จะเป็นสิ่งที่ง่าย แต่ในความทรงจำของฉันเมื่อเชลล์สคริปต์การใช้เครื่องหมายคำพูดคู่จะช่วยให้การขยายแบบกลมและตัวแปร แต่ในรหัสต่อไปนี้: #!/bin/sh echo *.sh echo "*.sh" echo '*.sh' echo $LANG echo "$LANG" echo '$LANG' ฉันได้รับผลลัพธ์นี้: bob.sh redeployJboss.sh *.sh *.sh en_US.utf8 en_US.utf8 $LANG การโควตเดี่ยวจะป้องกันไม่ให้ glob และการขยายตัวแปรผัน แต่การโควตสองครั้งจะช่วยให้การขยายตัวแปรเท่านั้นและไม่มีการวนซ้ำ? ฉันสามารถโค้งในรูปแบบการอ้างอิงใด ๆ ?

2
ลบรูปแบบไฟล์ที่ตรงกัน
ฉันจำเป็นต้องลบไฟล์ทั้งหมดซ้ำในโฟลเดอร์ย่อยทั้งหมดที่ชื่อไฟล์มีหมายเลขตามด้วย 'x' ตามด้วยหมายเลขอย่างน้อยสองครั้ง ตัวอย่าง: ฉันต้องการลบไฟล์เหล่านี้: 'aaa-12x123-123x12.jpg' 'aaa-12x12-123x12-12x123.jpg' แต่ฉันไม่ต้องการลบไฟล์เหล่านี้: 'aaa.jpg' 'aaa-12x12.jpg' 'aaaxaaa-123x123.jpg' 'aaaxaaa-aaaxaaa.jpg' ฉันจะทำสิ่งนั้นได้อย่างไร (จาก bash shell)
32 bash  files  find  wildcards 

2
ค้นหา (1): สัญลักษณ์ตัวแทนของดาวมีการใช้งานอย่างไรเพื่อให้ล้มเหลวในชื่อไฟล์บางส่วน
ในระบบไฟล์ที่ชื่อไฟล์อยู่ใน UTF-8 ฉันมีไฟล์ที่มีชื่อผิดพลาด มันจะแสดงเป็น: D�sinstaller, ชื่อจริงตาม zsh D$'\351'sinstaller:, Latin1 สำหรับDésinstaller, ตัวเองป่าเถื่อนฝรั่งเศสสำหรับ "ถอนการติดตั้ง" Zsh จะไม่เข้าคู่กับมัน[[ $file =~ '^.*$' ]]แต่จะจับคู่กับก้อนกลม*- นี่คือพฤติกรรมที่ฉันคาดหวัง ตอนนี้ฉันยังคงคาดหวังว่าจะพบมันเมื่อทำงานfind . -name '*'- ในความเป็นจริงฉันไม่เคยคาดหวังว่าชื่อไฟล์จะล้มเหลวในการทดสอบนี้ อย่างไรก็ตามด้วยLANG=en_US.utf8ไฟล์ไม่ปรากฏขึ้นและฉันต้องตั้งค่าLANG=C(หรือen_USหรือ'') เพื่อให้มันทำงาน คำถาม: การดำเนินการที่อยู่เบื้องหลังคืออะไรและฉันจะคาดการณ์ผลลัพธ์ได้อย่างไร ข้อมูล: Arch Linux 3.14.37-1-lts, find (GNU findutils) 4.4.2

10
การจัดการกับชื่อไฟล์ด้วยอักขระตัวแรกพิเศษ (เช่น♫)
ฉันเพิ่งเจอไฟล์ที่ชื่อขึ้นต้นด้วยตัวอักษร '♫' ฉันต้องการคัดลอกไฟล์นี้ให้อาหารมันffmpegและอ้างอิงในรูปแบบอื่น ๆ ใน terminal ฉันมักจะเติมชื่อไฟล์แปลก ๆ ให้โดยอัตโนมัติ แต่สิ่งนี้ล้มเหลวเนื่องจากฉันไม่สามารถพิมพ์อักษรตัวแรกได้ ฉันไม่ต้องการเปลี่ยนไปใช้เมาส์เพื่อดำเนินการทำสำเนาวาง ฉันไม่ต้องการจดจำรหัสจำนวนมากสำหรับสถานการณ์ที่เป็นไปได้ โซลูชันเฉพาะกิจของฉันคือการสลับvimวาง!lsและคัดลอกอักขระที่เป็นปัญหาจากนั้นออกและวางลงในเทอร์มินัล มันใช้งานได้ แต่ก็ค่อนข้างน่ากลัว มีวิธีที่ง่ายกว่าในการจัดการกับสถานการณ์ดังกล่าวหรือไม่? หมายเหตุ:ฉันกำลังใช้ตู้ปลาถ้ามันเปลี่ยนสิ่งต่าง ๆ

8
ทดสอบว่ามีไฟล์ที่ตรงกับรูปแบบเพื่อเรียกใช้สคริปต์หรือไม่
ฉันพยายามเขียนifคำสั่งเพื่อทดสอบว่ามีไฟล์ใดที่ตรงกับรูปแบบที่กำหนดหรือไม่ หากมีไฟล์ข้อความในไดเรกทอรีควรเรียกใช้สคริปต์ที่กำหนด รหัสของฉันในปัจจุบัน: if [ -f /*.txt ]; then ./script fi โปรดให้แนวคิดบางอย่าง; ฉันต้องการเรียกใช้สคริปต์หากมีอยู่.txtในไดเรกทอรีเท่านั้น



5
Glob พร้อมลำดับตัวเลข
ฉันมีรายการไฟล์ pdf นี้ในไดเรกทอรี: c0.pdf c12.pdf c15.pdf c18.pdf c20.pdf c4.pdf c7.pdf c10.pdf c13.pdf c16.pdf c19.pdf c2.pdf c5.pdf c8.pdf c11.pdf c14.pdf c17.pdf c1.pdf c3.pdf c6.pdf c9.pdf ฉันต้องการต่อสิ่งเหล่านี้โดยใช้ ghostscript ตามลำดับตัวเลข (คล้ายกับสิ่งนี้): gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=out.pdf *.pdf แต่ลำดับการขยายตัวของเชลล์ไม่ได้ทำซ้ำลำดับตามธรรมชาติของตัวเลข แต่ตามลำดับตัวอักษร: $ for f in *.pdf; do echo $f; done c0.pdf c10.pdf c11.pdf …



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