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

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

6
วิธีคัดลอกไฟล์บางไฟล์ แต่ไม่ใช่ทั้งหมด?
ดังนั้นคุณสามารถใช้*เป็นบัตรเสริมสำหรับไฟล์ทั้งหมดเมื่อใช้cpภายในบริบทของไดเรกทอรี มีวิธีการคัดลอกไฟล์ทั้งหมดยกเว้นxไฟล์หรือไม่
54 bash  shell  wildcards 

4
อักขระตัวแทน Bash star * จะสร้างรายการเรียงลำดับ (จากน้อยไปหามาก) เสมอหรือไม่
ฉันมีไดเรกทอรีที่เต็มไปด้วยไฟล์ที่มีชื่ออย่างlogXXที่ XX เป็นเลขฐานสองตัวอักขระสองตัวไม่มีเลขศูนย์ตัวพิมพ์ใหญ่เช่น: log00 log01 log02 ... log0A log0B log0C ... log4E log4F log50 ... โดยทั่วไปจะมีจำนวนไฟล์รวมน้อยกว่า 20 หรือ 30 ไฟล์ วันที่และเวลาในระบบของฉันไม่ใช่สิ่งที่สามารถพึ่งพาได้ (ระบบฝังตัวที่ไม่มีแหล่งเวลา NTP หรือ GPS ที่เชื่อถือได้) อย่างไรก็ตามชื่อไฟล์จะเพิ่มขึ้นอย่างน่าเชื่อถือดังที่แสดงไว้ด้านบน ฉันต้องการgrepผ่านไฟล์ทั้งหมดสำหรับรายการบันทึกล่าสุดบางประเภทฉันหวังว่าจะcatรวมไฟล์เข้าด้วยกันเช่น ... cat /tmp/logs/log* | grep 'WARNING 07 -' | tail -n1 แต่มันเกิดขึ้นกับผมว่ารุ่นที่แตกต่างกันของbashหรือshหรือzshอื่น ๆ อาจจะมีความคิดที่แตกต่างกันเกี่ยวกับวิธีการที่*จะขยายตัว man bashหน้าไม่ได้บอกหรือไม่ว่าการขยายตัวของ*จะเป็นรายชื่อเรียงตามตัวอักษรแน่นอนขึ้นชื่อไฟล์ที่ตรงกัน ดูเหมือนว่าจะเพิ่มขึ้นทุกครั้งที่ฉันลองใช้กับระบบทั้งหมดที่ฉันมีให้ - แต่มันเป็นพฤติกรรมที่กำหนดไว้หรือเพียงแค่การนำไปใช้งานโดยเฉพาะ กล่าวอีกนัยหนึ่งฉันสามารถพึ่งพาcat /tmp/logs/log*การเชื่อมต่อไฟล์บันทึกทั้งหมดของฉันด้วยกันตามลำดับตัวอักษรได้หรือไม่?
53 bash  shell  wildcards 

1
'rm. *' เคยลบไดเรกทอรีหลักหรือไม่
นิพจน์.*ถูกขยายโดย bash เพื่อรวมไดเรกทอรีปัจจุบันและพาเรนต์: $ ls -la total 2600 drwxrwxrwx 2 terdon terdon 2162688 Sep 10 16:22 . drwxr-xr-x 142 terdon terdon 491520 Sep 10 15:34 .. -rw-r--r-- 1 terdon terdon 0 Sep 10 16:22 foo $ echo .* . .. ถ้าฉันใช้rm -rf .*Debian โดยใช้ GNU bash version 4.2.36(1)-releaseและrmจากrm (GNU coreutils) …
53 shell  wildcards  rm  posix 

4
ยกเว้นหนึ่งรูปแบบจากการจับคู่แบบกลม
ฉันมีหลายไฟล์ที่มีชื่อไฟล์ฐานเดียวกัน ฉันต้องการลบทั้งหมดยกเว้นหนึ่งรายการ foo.org #keep foo.tex #delete foo.fls #delete foo.bib #delete etc หากฉันไม่ต้องการเก็บไว้ฉันรู้ว่าฉันสามารถrm foo.*ใช้ได้ TLDPสาธิต^การคัดค้านการแข่งขัน จากการทดลองและข้อผิดพลาดฉันสามารถค้นพบสิ่งนั้นได้ rm foo.*[^org] ทำในสิ่งที่ฉันต้องการ แต่ฉันไม่เข้าใจไวยากรณ์ นอกจากนี้ในขณะที่ไม่ได้เป็นข้อ จำกัด ในกรณีที่ใช้งานของฉันฉันคิดว่ารูปแบบนี้ยังไม่สนใจและfoo.o foo.orรูปแบบนี้ทำงานอย่างไรและรูปทรงแบบใดที่ละเว้นเพียง foo.orgดูเหมือน
53 bash  wildcards 

3
การใช้รูปแบบ OR ในสัญลักษณ์ตัวแทนเชลล์
เนื้อหาของ dir ของฉันคือ $ ls -lrt total 0 -rw-r--r-- 1 user1 admin 19 Oct 8 12:31 night.txt -rw-r--r-- 1 user1 admin 19 Oct 8 12:31 noon.txt -rw-r--r-- 1 user1 admin 38 Oct 8 12:31 day.txt ฉันต้องการแสดงรายละเอียดของไฟล์ที่มีคำในชื่อไฟล์ตามที่ระบุ ตัวอย่าง: $ ls -lrt *day|night* ls: *day: No such file or directory bash: night.txt: …
52 bash  shell  zsh  ls  wildcards 

5
ฉันจะลบไดเรกทอรีย่อยทั้งหมดออกจากภายในไดเรกทอรีได้อย่างไร
คำถามนี้เป็นเฟสที่สองของคำถามแรกที่ฉันโพสต์ที่นี่ ฉันมีไดเรกทอรีที่มีกลุ่มของไดเรกทอรีย่อยไฟล์. zip และไฟล์สุ่มอื่น ๆ ที่ไม่อยู่ในไดเรกทอรีย่อย ฉันต้องการสคริปต์บรรทัดคำสั่งเพื่อลบไดเรกทอรีย่อยทั้งหมดออกจากภายในไดเรกทอรีหลัก แต่เก็บไฟล์ zip และไฟล์ทั้งหมดที่ไม่ได้อยู่ในไดเรกทอรีย่อยใด ๆ ไดเรกทอรีย่อยทั้งหมดมีเนื้อหาดังนั้นฉันเชื่อว่าฉันต้องบังคับให้ลบด้วยคำสั่ง -f ดังนั้นโดยทั่วไปคำสั่งที่มีลักษณะอยู่ในไดเรกทอรีหลัก (หรือไดเรกทอรีปัจจุบัน) จะลบโฟลเดอร์ทั้งหมดออกจากภายใน แต่จะเก็บเนื้อหาและไฟล์อื่น ๆ ทั้งหมดที่ไม่ใช่โฟลเดอร์หรืออยู่ในโฟลเดอร์ ฉันเข้าใจว่าการลบรายการออกจากบรรทัดคำสั่งจำเป็นต้องได้รับการดูแลเป็นพิเศษ แต่ฉันได้ใช้ความระมัดระวังที่จำเป็นทั้งหมดแล้วในการสำรองข้อมูลจากระยะไกล

5
ฉันจะลบไดเรกทอรีซ้ำด้วยสัญลักษณ์แทนได้อย่างไร
ฉันทำงานผ่าน SSH ใน WD My Book World Edition โดยทั่วไปฉันต้องการเริ่มต้นที่ระดับไดเรกทอรีเฉพาะและลบไดเรกทอรีย่อยที่ตรงกัน.Apple*ทั้งหมดซ้ำ ๆ ฉันจะทำยังไง ฉันเหนื่อย rm -rf .Apple* และ rm -fR .Apple* ไม่ลบไดเรกทอรีที่ตรงกับชื่อนั้นภายในไดเรกทอรีย่อย

13
การแปลงไฟล์ภาพหลายไฟล์จาก JPEG เป็นฟอร์แมท PDF
ฉันต้องการแปลงไฟล์บางส่วนจาก jpeg เป็น pdf ฉันใช้คำสั่งดังต่อไปนี้ $ convert image1.jpg image1.pdf แต่ฉันมี 100 ภาพ ฉันจะแปลงทั้งหมดให้เป็น pdf ที่สอดคล้องกันได้อย่างไร ฉันเหนื่อย $ convert image*.jpg image*.pdf มันไม่ทำงาน

7
ทำไม ls -d ยังแสดงรายการไฟล์และเอกสารอยู่ที่ไหน?
เมื่อระบุls --directory a*ว่าควรแสดงเฉพาะไดเรกทอรีที่ขึ้นต้นด้วยa* แต่มันจะแสดงรายการไฟล์และไดเรกทอรีที่เริ่มต้นด้วย a คำถาม : ที่ฉันอาจพบเอกสารบางอย่างเกี่ยวกับเรื่องนี้อื่น ๆ กว่าmanและinfoที่ผมคิดว่าผมมองอย่างละเอียด? ทำงานใน BASH เท่านั้นหรือไม่
48 bash  shell  ls  wildcards  options 


1
ค้นหาไฟล์ที่ไม่มีนามสกุล
สมมติว่าฉันมี: foo.txt bar baz.ooo ถ้าฉันใช้ls -1 !(*.*)แล้วฉันจะได้รับbarผล เยี่ยมมากตอนนี้ฉันต้องการได้ผลลัพธ์เหมือนกันกับการค้นหา - บางอย่างfind -regexที่สามารถทำงานได้ บันทึก: find -name !(*.*)ไม่ใช่คำตอบ!(*.*)ในขณะที่มันยังคงเป็นรูปกลมของ Bash ซึ่งฉันไม่สามารถใช้ได้
43 bash  shell  find  wildcards 

5
ฉันจะลบลิงค์สัญลักษณ์ทั้งหมดด้วยเป้าหมายพิเศษได้อย่างไร
ด้วยคำสั่ง: ls -la * ฉันสามารถแสดงลิงก์สัญลักษณ์ทั้งหมดของฉันได้ ฉันจะลบลิงก์สัญลักษณ์ทั้งหมดที่เชื่อมโยงไปยังโฟลเดอร์พิเศษได้อย่างไร ตัวอย่างเช่น: ในไดเรกทอรีของusr/local/binฉันฉันมีรายการต่อไปนี้: lrwxrwxrwx 1 root root 50 Apr 22 14:52 allneeded -> /usr/local/texlive/2011/bin/x86_64-linux/allneeded lrwxrwxrwx 1 root root 47 Apr 22 14:52 amstex -> /usr/local/texlive/2011/bin/x86_64-linux/amstex lrwxrwxrwx 1 root root 24 Apr 23 19:09 arara -> /home/marco/.arara/arara ตอนนี้ฉันต้องการลบลิงก์ทั้งหมดที่มีเส้นทาง /usr/local/texlive/
43 wildcards  symlink  rm 

7
เหตุใด [AZ] จึงตรงกับอักษรตัวพิมพ์เล็กใน bash
ในเชลล์ทั้งหมดที่ฉันรู้จักrm [A-Z]*ลบไฟล์ทั้งหมดที่ขึ้นต้นด้วยตัวอักษรตัวพิมพ์ใหญ่ แต่ด้วยการทุบตีสิ่งนี้จะลบไฟล์ทั้งหมดที่ขึ้นต้นด้วยตัวอักษร เนื่องจากปัญหานี้มีอยู่บน Linux และ Solaris ที่มี bash-3 และ bash-4 จึงไม่สามารถเป็นข้อบกพร่องที่เกิดจากตัวจับรูปแบบ buggy ใน libc หรือนิยามที่ตั้งที่พลาดไป พฤติกรรมที่แปลกและเสี่ยงนี้มีจุดประสงค์หรือเป็นเพียงข้อผิดพลาดที่มีอยู่ซึ่งไม่ได้ผสมกันมาหลายปีหรือไม่?
43 bash  shell  wildcards  locale 

11
แสดงเฉพาะไฟล์ที่ซ่อนอยู่ (ไฟล์ dot) ในนามแฝง ls
ฉันกำลังใช้คำสั่ง ls -a | grep '^\.' เพื่อแสดงเฉพาะไฟล์ที่ซ่อนอยู่ ฉันเพิ่มบรรทัด alias hidden='ls -a | grep '^\.'' # show only hidden files ไปยัง.bash_aliasesไฟล์ แต่มันไม่ได้ผล มันอาจเป็นปัญหากับ'ตัวละคร คุณกรุณาช่วยฉันเขียนนามแฝงที่ถูกต้องได้ไหม
42 ls  alias  wildcards 

7
ฉันจะคัดลอกหลายไฟล์ด้วยไวด์การ์ดได้อย่างไร
ฉันมีโฟลเดอร์ที่มีไฟล์จำนวนหนึ่งอยู่ในนั้น ABC. * (มีไฟล์ประมาณ 100 ไฟล์) ฉันต้องการคัดลอกไฟล์ทั้งหมดไปยังไฟล์ใหม่ด้วยชื่อที่ขึ้นต้นด้วย DEF * ดังนั้นฉันต้องการ ABC.Page1 ABC.Page2 ABC.Topic12 ...etc คัดลอกไปยัง DEF.Page1 DEF.Page2 DEF.Topic12 ...etc วิธีที่ง่ายที่สุดในการทำเช่นนี้กับคำสั่งแบทช์ (ใน BASH หรือคล้ายกัน) คืออะไร? ฉันกำลังคิดอะไรบางอย่างที่เกี่ยวข้องกับ sed หรือ awk หรือ xargs แต่ฉันมีปัญหาในการหาไวยากรณ์ ฉันสามารถเขียนสคริปต์ Python ได้ แต่ฉันคิดว่าอาจมีโซลูชันบรรทัดคำสั่งที่ไม่ซับซ้อนเกินไป

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