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

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

3
เปลี่ยนชื่อไฟล์ด้วยชื่อแปลก ๆ บนภูเขาแซมบ้า
ฉันต้องการเปลี่ยนชื่อไฟล์ด้วยชื่อแปลก ๆ เป็นสิ่งที่สมเหตุสมผล แต่ฉันไม่สามารถ: / $ mv *_000c.jpg 000c.jpg mv: cannot move '?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory ฉันได้ลองใช้หมายเลขไอโหนดตามที่แนะนำในไม่กี่แห่งบนอินเทอร์เน็ต: $ ls -il *000c.jpg ls: '?j?Z?R?C1_000c.jpg': No such file or directory 213915 -rw-r--r-- 1 wolf wolf 794655 Jul 21 2012 '?j?Z?R?C1_000c.jpg' $ find . -inum 213915 -print0 | xargs …

1
การแทนที่ Bash พร้อมตัวแปรที่กำหนดจากรูปแบบ glob
ตัวอย่างด้านล่างอธิบายถึงปัญหา เหตุใดจึงFILENAMEพิมพ์อย่างถูกต้องเมื่อสะท้อนและรับรู้เป็นรูปแบบเมื่อใช้การทดแทน? #!/bin/bash FILEPATH_WITH_GLOB="/home/user/file_*" FILENAME=$(basename "$FILEPATH_WITH_GLOB") echo $FILENAME #file_1234 echo ${FILENAME:1:5} #ile_* <---why is this not ile_1

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

2
อะไรคือความแตกต่างระหว่าง“ * .pl” และ * .pl ใน grep? ทำไมการอ้างถึงเปลี่ยนผลลัพธ์?
อะไรคือความแตกต่างระหว่าง: grep "string" . -r --include *.pl และ grep "string" . -r --include "*.pl" หลังรวมถึงไฟล์ในไดเรกทอรีย่อยในขณะที่อดีตไม่ ทำไม?

5
การจับคู่รูปแบบกับชื่อพา ธ ใน bash
ฉันต้องการดำเนินการกับรายการไดเรกทอรีย่อยในไดเรกทอรี พิจารณา: for x in x86-headers/*/C/populate.sh; do echo $x; done สิ่งนี้จะช่วยให้ x86-headers/elf/C/populate.sh x86-headers/gl/C/populate.sh x86-headers/gmp/C/populate.sh x86-headers/gnome2/C/populate.sh x86-headers/gtk2/C/populate.sh x86-headers/jni/C/populate.sh x86-headers/libc/C/populate.sh แต่ฉันต้องการค่าที่สอดคล้องกับส่วนที่สองของเส้นทาง elf, glฯลฯ x86-headersฉันรู้วิธีการเปลื้องผ้าชั้นนำ for x in x86-headers/*/C/populate.sh; do i=${x##x86-headers/}; echo $i; done ซึ่งจะช่วยให้ elf/C/populate.sh gl/C/populate.sh gmp/C/populate.sh gnome2/C/populate.sh gtk2/C/populate.sh jni/C/populate.sh libc/C/populate.sh ฉันรู้วิธีถอดคำศัพท์ในภายหลังในเส้นทางด้วย เช่นลงไปหนึ่งระดับ: cd x86-headers for x in */C/populate.sh; do i=${x%%/*}; echo …

2
“ grep -r foo *” และ“ grep -r foo”
เมื่อใช้ grep -r คุณสามารถค้นหาไฟล์ทั้งหมดด้วย * หรือ และดูเหมือนว่าจะกลับมาเหมือนเดิม แต่มันเหมือนกันจริงหรือ สมมติว่าฉันค้นหา "foo" จากนั้นฉันสามารถเขียนได้ grep -r foo * หรือ grep -r foo . ทุกคนจะพยายามอธิบายความแตกต่างระหว่าง และ *?
10 grep  wildcards 

4
ค้นหาสตริงในไฟล์เฉพาะภายในไดเรกทอรีย่อย
สมมติว่าฉันต้องการค้นหาฟังก์ชันGetTypes()ในทุกไฟล์ต้นฉบับ C # ( .cs) ไดเรกทอรี / ไดเรกทอรีย่อย ผมใช้แต่ฉันได้ข้อผิดพลาดกับgrep -rn GetTypes *.cs grep: *.cs: No such file or directoryฉันต้องใช้grep -rn GetTypes *แต่ในกรณีนี้มันแสดงไฟล์ทั้งหมดไม่*.csเพียง ฉันต้องใช้คำสั่งอะไรเพื่อค้นหาสตริงใน.csไฟล์เท่านั้น?

6
ประมวลผลไฟล์ / etc / passwd เพื่อแสดงรายการผู้ใช้ทั้งหมดที่มีโฮมโฟลเดอร์อยู่ใน / home
ฉันมีตัวอย่างไฟล์ / etc / passwd ดังนี้: tom:x:1000:1000:Work:/home/tom:/bin/bash george:x:1000:1000:Work:/home/george:/bin/bash bla:x:1000:1000:Work:/home/bla:/bin/bash boo:x:1000:1000:Work:/home/boo:/bin/bash bee:x:1000:1000:Work:/root/list:/bin/bash /home/ฉันพยายามที่จะแสดงรายชื่อผู้ใช้ทั้งหมดที่มีบ้านในโฟลเดอร์ ฉันเขียน cat ~/Desktop/e.txt |awk -F ":" '{if ($6 ~/^/home/) print $1;}' โดยที่ e.txt เป็นข้อความที่ฉันคัดลอกมาที่นี่ ฉันเข้าใจว่ามีปัญหากับแบ็กสแลชซึ่งเป็นอักขระการหลบหนี แต่ฉันจะแก้ไขได้อย่างไรเพื่อให้สามารถแสดงรายการเหล่านั้นในหนึ่งบรรทัดของคำสั่งได้

1
ลบไฟล์ที่เก่ากว่า 500 วัน
ฉันมีไดเรกทอรีพร้อมไฟล์จากปี 2010 .. ฉันต้องการลบไฟล์ทั้งหมดที่เก่ากว่า 500 วันและฉันลองทำสิ่งนี้: find /var/log/arc/* -type f -mtime +500 -delete {}\; แต่ฉันได้รับสิ่งนี้: -bash: /usr/bin/find: Argument list too long ฉันรู้ว่านี่หมายความว่ามีไฟล์มากเกินไปและfindไม่สามารถจัดการได้ แต่ถึงฉันจะใส่+2000อันไหนมากกว่า 3 ปีฉันก็ยังได้ สิ่งที่ฉันหายไปที่นี่

3
ฝากรายการของไฟล์ที่ไม่มีอยู่ทั้งหมด
ฉันใช้คำสั่งจากสคริปต์เช่น tar -c -f ar.tar a b c d โดยที่ b, c และ d อาจไม่มีอยู่และอาจเป็นไดเร็กทอรี โซลูชั่นที่ฉันได้มาด้วยกำลังท่อส่งออกของls -dไปgrepแล้วประกบมันลงไปในtarคำสั่งหรือการเปิด globs @(a|b|c|d)ที่เพิ่มขึ้นสำหรับ มีวิธีที่เหนือกว่าในการทำเช่นนี้? ฉันใช้ Debian Wheezy ซึ่งดูเหมือนจะไม่มี--includeพารามิเตอร์
10 shell  wildcards  tar 

7
วิธีแสดงรายการไฟล์ที่ขึ้นต้นด้วย“ a” หรือ“ c” จาก / etc [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดเมื่อเดือนที่แล้ว ฉันพยายามls /etc/[ac]*แต่มันแสดงไดเรกทอรีที่ขึ้นต้นด้วยaหรือcและเนื้อหาทั้งหมดไม่ใช่ไฟล์ที่ขึ้นต้นด้วย " a " หรือ " c "
10 ls  wildcards 

7
ค้นหาไฟล์ตามความยาวของชื่อไฟล์
ฉันต้องการค้นหาไฟล์ทั้งหมดตามความยาวของชื่อไฟล์ ตัวอย่างเช่นถ้าฉันต้องการค้นหาไฟล์ที่มีความยาว 1 เช่นa.go, b.go. ฉันใส่: grep '.\{1\}' file แต่มันไม่ทำงาน ฉันสามารถใช้คำสั่งอะไรเพื่อค้นหาไฟล์ตามความยาวชื่อไฟล์

3
ทำไมหรือทำไมจึงใช้ `. *?` ดีกว่า '. *'?
ฉันตอบคำถามนี้ใน SuperUserซึ่งเป็นสิ่งที่เกี่ยวข้องกับประเภทของนิพจน์ทั่วไปที่ใช้ในขณะที่ทำการพิมพ์ออกมา คำตอบที่ฉันให้คือ: tail -f log | grep "some_string.*some_string" จากนั้นในสามความคิดเห็นต่อคำตอบของฉัน@Bobเขียนสิ่งนี้: .*เป็นโลภและอาจจับภาพมากกว่าที่คุณต้องการ .*?มักจะดีกว่า ถ้าอย่างนั้น the ?เป็นตัวดัดแปลง*ทำให้มันขี้เกียจแทนที่จะเป็นค่าเริ่มต้นโลภ สมมติว่า PCRE ฉันไปหาPCREแต่ไม่สามารถเข้าใจความหมายของคำตอบนี้ได้? และในที่สุดนี้ ฉันควรชี้ให้เห็นว่านี่คือ regex (grep ทำ POSIX regex โดยปริยาย) ไม่ใช่ shell glob ฉันรู้ว่า Regex คืออะไรและใช้งานพื้นฐานมากเพียงใดในคำสั่ง grep ดังนั้นฉันไม่สามารถรับความคิดเห็นทั้งสามข้อเหล่านี้ได้และฉันมีคำถามเหล่านี้อยู่ในใจ: อะไรคือความแตกต่างในการใช้งานของ.*?vs. .*? ไหนดีกว่าและภายใต้สถานการณ์ใด กรุณาให้ตัวอย่าง นอกจากนี้ยังจะเป็นประโยชน์ในการทำความเข้าใจความคิดเห็นถ้าใครทำได้ UPDATE: เพื่อเป็นคำตอบสำหรับคำถามRegex ต่างจาก Shell Globs อย่างไร @Kusalanandaระบุลิงก์นี้ในความคิดเห็นของเขา หมายเหตุ: หากจำเป็นโปรดอ่านคำตอบของฉันสำหรับคำถามนี้ก่อนตอบเพื่ออ้างอิงถึงบริบท


2
ลบอักขระยูนิโค้ดที่ไม่รู้จักออกจาก textfiles - sed วิธีทุบตี / bash อื่น ๆ
ฉันต้องการค้นหาและแทนที่อักขระที่ไม่รู้จักทั้งหมดในบางไฟล์ที่มีชื่อเหมือนกัน เมื่อเปิดไฟล์ดังกล่าวด้วย vi ฉันอ่านรหัส <91> สำหรับตัวละครนั้น เมื่อเปิดมันด้วยนาโนฉันอ่าน "เครื่องหมายคำถาม" ในรูปเพชร (สีดำสลัว) ฉันต้องการแทนที่ตัวละครที่ไม่รู้จักด้วยเครื่องหมายคำพูด (') ฉันพยายามหลายวิธีโดยไม่มีโชค ฉันเหนื่อย: find ./ -name filename.txt -exec perl -i~ -pe "s/\x91/'/" {} \; find ./ -name filename.txt -exec sed -i "s/\x91/'/g" {} \; แก้ไข ข้อมูลเพิ่มเติมเกี่ยวกับตัวละคร: Hexadecimal: 91 68 74 74 Decimal: 145 104 116 116 Octal: 221 150 …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.