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

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

3
วิธีการยกเว้นบางไฟล์จากกลไกการขยายชื่อไฟล์ในทุบตี?
ฉันมีไดเรกทอรีระบบไฟล์ Ubuntu ในไดเรกทอรีรากและฉันตั้งใจคัดลอกหลายร้อยไฟล์ลงในไดเรกทอรีราก ฉันพยายามลบไฟล์ที่คัดลอกโดยไม่รวมระบบไฟล์เช่น rm -rf !{bin,sbin,usr,opt,lib,var,etc,srv,libx32,lib64,run,boot,proc,sys,dev} ./. บุมันไม่ทำงาน วิธีที่เหมาะสมในการยกเว้นไดเรกทอรีบางรายการในขณะที่ลบทั้งรายการคืออะไร แก้ไข: อย่าลองคำสั่งใด ๆ ที่นี่โดยไม่รู้ว่าจะทำอย่างไร!

5
ย้ายทุกไฟล์ที่ไม่ใช่ไดเรกทอรี
ฉันมีไดเรกทอรีที่ฉันพยายามล้างออกที่มีทั้งไฟล์และไดเรกทอรีย่อย สิ่งที่ฉันพยายามทำนั้นง่ายมาก: ย้ายไฟล์ทั้งหมดไปยังไดเรกทอรีอื่น แต่ปล่อยให้ทุกไดเรกทอรีย่อยตามที่เป็น ฉันกำลังคิดเช่น: mv [*_but_no_dirs] ./other_directory ดูเหมือนว่าควรมีวิธีง่ายๆในการทำเช่นนี้กับ wildcard *และ regex ... ใครมีแนวคิดบ้าง
14 bash  directory  wildcards  mv 

5
ฉันสามารถเลือกผลลัพธ์เดียวจาก bash glob ได้หรือไม่
ฉันกำลังพยายามเขียนสคริปต์สำหรับงานเพื่อทำให้การรายงานบางอย่างเกี่ยวกับผลลัพธ์เป็นอัตโนมัติ ล็อกไฟล์คือ (ปัจจุบันคือ 'มาตรฐาน' ในอนาคต) เก็บไว้ในโครงสร้างพา ธ ประเภทนี้: /<root_path>/<process_one_path>/logs/<time_date_stamp>/<specific_log_file> /<root_path>/<process_two_path>/logs/<different_time_date_stamp>/<specific_log_file> ทุกส่วนของเส้นทางนั้นเป็นที่รู้จักยกเว้นการประทับเวลาตามวันเวลาซึ่งเป็นส่วนล่าสุดในโฟลเดอร์เสมอ ถ้าฉันพยายามใช้ไวด์การ์ดแทนการประทับเวลาฉันจะได้ผลลัพธ์หลายอย่างเช่น: > ls /<root_path>/<process_two_path>/logs/* [tab] 20130102-175103 20130118-090859 20130305-213506 ฉันแค่ต้องการให้ส่งคืนไฟล์ล่าสุดเป็นไปได้ด้วย Bash หรือไม่ NB (ฉันไม่มี zsh และน่ารักอย่างที่มันฟังฉันสงสัยว่าเราจะเอามันไปทำงาน)
14 bash  wildcards  glob 

4
วิธีการทำให้ bash glob เป็นตัวแปรสตริง
ข้อมูลระบบ ระบบปฏิบัติการ: OS X bash: GNU bash, รุ่น 3.2.57 (1) - ปล่อย (x86_64-apple-darwin16) พื้นหลัง ฉันต้องการให้ไทม์แมชชีนแยกชุดไดเรกทอรีและไฟล์ออกจากโครงการ git / nodejs ทั้งหมดของฉัน ไดเรกทอรีโครงการของฉันอยู่ใน~/code/private/และดังนั้นฉันพยายามที่จะใช้ทุบตีวนลูปที่จะทำ~/code/public/tmutil ปัญหา เวอร์ชั่นสั้น หากฉันมีตัวแปรสตริงที่คำนวณได้kฉันจะทำให้มันกลมกลืนไปหรือขวาก่อน for-loop ได้อย่างไร: i='~/code/public/*' j='*.launch' k=$i/$j # $k='~/code/public/*/*.launch' for i in $k # I need $k to glob here do echo $i done k=$i/$jในรุ่นยาวด้านล่างนี้คุณจะเห็น ดังนั้นฉันไม่สามารถเข้ารหัสสตริงใน for for loop …

4
วิธีค้นหาไฟล์ทั้งหมดยกเว้นไฟล์ที่ระบุ
lsสามารถให้ผลเหมือน [root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# ls CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo แต่จริงๆแล้วผมหวังว่าจะเป็นเพียงแค่หาCentOS-Base.repo, CentOS-Debuginfo.repoและแต่ไม่CentOS-Vault.repo CentOS-Media.repoดังนั้นฉันจึงเรียกใช้คำสั่งนี้ ls [^\(Media\)] แต่ฉันได้รับข้อมูลข้อผิดพลาดฉันควรทำอย่างไร?
13 wildcards 


5
ฉันจะเขียนโปรแกรมได้อย่างไรถ้าชื่อไฟล์ตรงกับรูปแบบของเชลล์กลม?
ผมอยากจะบอกว่าสตริงจะตรงตามรูปแบบ $string glob อาจหรืออาจไม่ใช่ชื่อของไฟล์ที่มีอยู่ ฉันจะทำสิ่งนี้ได้อย่างไร$pattern$string สมมติรูปแบบต่อไปนี้สำหรับสตริงอินพุตของฉัน: string="/foo/bar" pattern1="/foo/*" pattern2="/foo/{bar,baz}" ฉันต้องการที่จะหาสำนวนทุบตีที่กำหนดว่า$stringจะได้รับการจับคู่โดย$pattern1, $pattern2หรือรูปแบบ glob พลอื่น ๆ นี่คือสิ่งที่ฉันได้ลองไปแล้ว: [[ "$string" = $pattern ]] เกือบจะใช้งานได้ยกเว้นว่า$patternตีความเป็นรูปแบบสตริงและไม่เป็นรูปแบบแบบกลม [ "$string" = $pattern ] ปัญหาด้วยวิธีนี้คือการที่$patternมีการขยายและจากนั้นเปรียบเทียบสตริงจะดำเนินการระหว่างและการขยายตัวของ$string$pattern [[ "$(find $pattern -print0 -maxdepth 0 2>/dev/null)" =~ "$string" ]] อันนี้ใช้งานได้ แต่เฉพาะถ้า$stringมีไฟล์ที่มีอยู่ [[ $string =~ $pattern ]] สิ่งนี้ไม่ทำงานเนื่องจาก=~โอเปอเรเตอร์ทำให้เกิด$patternการตีความว่าเป็นนิพจน์ปกติแบบขยายไม่ใช่รูปแบบแบบกลมหรือไวด์การ์ด
13 bash  wildcards 

3
เหตุใด [az] เครื่องหมายดอกจันจึงจับคู่หมายเลข
ฉันมี 3 ไดเรกทอรีที่เส้นทางปัจจุบัน $ls a_0db_data a_clean_0db_data a_clean_data $ls a_*_data a_0db_data: a_clean_0db_data: a_clean_data: $ls a_[a-z]*_data a_clean_0db_data: a_clean_data: ผมคาดว่าคำสั่ง ls a_clean_dataสุดท้ายคำสั่งเพื่อให้ตรงเท่านั้น ทำไมถึงยังตรงกับที่มี0? bash --version GNU bash, version 4.2.24(1)-release (i686-pc-linux-gnu)

2
รูปแบบชื่อไฟล์เชลล์ที่ขยายเป็น dot files แต่ไม่ใช่ `.. '
เมื่อเร็ว ๆ นี้ฉันมีอุบัติเหตุเล็ก ๆ น้อย ๆ ที่เกิดจากรูปแบบเปลือกหอยที่ขยายออกไปอย่างคาดไม่ถึง ฉันต้องการเปลี่ยนเจ้าของจุดไฟล์หลาย ๆ อันใน/rootไดเรกทอรีดังนั้นฉันก็ทำได้ chown -R root .* ตามธรรมชาติแล้วการ.*ขยายไปสู่..ภัยพิบัติ ฉันรู้ว่าในbashพฤติกรรมนี้สามารถเปลี่ยนแปลงได้โดยการปรับแต่งตัวเลือกเชลล์บางอย่าง แต่ด้วยการตั้งค่าเริ่มต้นจะมีรูปแบบใดที่จะขยายไปยังทุก ๆ จุดไฟล์ในไดเรกทอรี แต่ไม่ใช่.และ..?

5
CP ไฟล์ที่ซ่อนอยู่กับรูปแบบ glob
สถานการณ์: $ mkdir foo && touch foo/.test $ cp foo/* . zsh: no matches found: foo/* (or bash : cp: cannot stat ‘foo/*’: No such file or directory) ฉันมีไดเรกทอรีที่เต็มไปด้วยโฟลเดอร์และไฟล์ที่ซ่อนอยู่ เกิดอะไรขึ้นและทางออกคืออะไร?
13 zsh  wildcards  cp  dot-files 

3
บัตรเสริมคือการเลือกไดเรกทอรีทั้งหมดในไดเรกทอรี
ฉันต้องการตั้งค่า bit bit สำหรับไดเรกทอรีทั้งหมดในไดเรกทอรีที่ไม่รวมไฟล์ มีไวลด์การ์ดในการทำเช่นนี้หรือไม่? #sudo chmod g+s /var/www/<WILD_CARD_FOR_ALL_DIRECTORIES>

4
ฉันจะเลือกไฟล์เฉพาะในไดเรกทอรีอื่นโดยใช้ bash ได้อย่างไร
ฉันต้องการแสดงรายการ (หรือลบหรือดำเนินการอื่น ๆ ) ในบางไฟล์ในไดเรกทอรีเช่นนี้ $ ls /opt/somedir/ aa bb cc aa.txt bb.txt cc.txt $ ls /opt/somedir/(aa|bb|cc) ## pseudo-bash :p aa bb cc ฉันจะบรรลุสิ่งนี้ได้อย่างไร (โดยไม่ต้อง cd-ing ไปที่ไดเรกทอรีก่อน)

1
bash Extended glob - จับคู่ไฟล์โดยไม่มีคำนำหน้า
ฉันพยายามจับคู่ชื่อไฟล์สำหรับคุก fail2ban ดังนั้นฉันจึงต้องใช้ชื่อไฟล์กลม ๆ เท่านั้น - ไม่ใช่ regexes หรือ bash scripting /var/log/apache2ไดเรกทอรีของฉันมีไฟล์รวมถึง: example.com.error.log db.example.com.error.log app1.example.com.error.log app2.example.com.error.log ฉันพยายามที่จะสร้าง glob เพื่อให้ตรงกับไฟล์ทั้งหมดที่ลงท้ายด้วย.error.log ยกเว้น db.example.error.log - นี้เป็นไปได้หรือไม่ ฉันได้พยายามแต่ยังคงตรงกับ!(db)*.error.log db.example.com.error.logฉันคาดเดาว่าการ!()จับคู่ไม่มีตัวละครทำให้การ*จับคู่จากจุดเริ่มต้นของชื่อไฟล์ หมายเหตุ: ฉันไม่ต้องการขยาย glob เมื่อเพิ่มappXไฟล์บันทึกใหม่ดังนั้นฉันไม่สามารถใช้@()กับรายการชื่อไฟล์ที่ไม่ใช่ db ที่รู้จักในปัจจุบัน (พื้นหลัง: ฉันต้องการสร้างตัวกรองห้ามใครก็ตามที่ขอ phpMyAdmin URL ใด ๆ ในโดเมนใด ๆยกเว้น db.example.com)

2
ยกเว้นหนึ่งไดเรกทอรีในรูปแบบการจับคู่ `ls '
ฉันพยายามที่จะlsdirs ที่มี.pngไฟล์อยู่ภายใน (ไม่จำเป็นต้องเรียกซ้ำแม้ว่ามันจะมีประโยชน์พิเศษ) ยกเว้นหนึ่ง ยกเว้นหนึ่งไดเรกทอรีเช่น ls */*.png ทำงานได้ดี ls (^one)*/*.png ไม่ส่งคืน stdout ฉันจะประสบความสำเร็จได้อย่างไร ฉันตาบอดแล้วก็ส่งไปที่espeakดังนั้นฉันสามารถได้ยินได้แค่ตอนนี้เท่านั้น
13 shell  ls  wildcards 

5
ฉันจะระงับข้อความแสดงข้อผิดพลาดจาก cp ได้อย่างไร
cpฉันกำลังมองหาวิธีการที่จะสั่งปราบข้อผิดพลาดในลินุกซ์โดยเฉพาะอย่างยิ่งคำสั่ง ฉันทำ: root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/. cp: cannot stat `/srv/ftp/201*/wha*/*.jj': No such file or directory ฉันจะระงับข้อความแสดงข้อผิดพลาดที่พิมพ์บนหน้าจอได้อย่างไร นั่นคือฉันไม่ต้องการเห็นข้อความแสดงข้อผิดพลาดนี้ในมอนิเตอร์ของฉัน
13 shell  wildcards  cp 

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