ฉันจะ glob สำหรับไฟล์ที่ซ่อนอยู่ทั้งหมดได้อย่างไร


22

ฉันต้องการที่จะดำเนินการบางอย่าง (พูดchown) ในทุกไฟล์ที่ซ่อนอยู่ในไดเรกทอรี

ฉันรู้ว่านี้.*คือไม่ได้ความคิดที่ดีเพราะมันยังจะได้พบในปัจจุบัน.และผู้ปกครอง..ไดเรกทอรี (ฉันรู้ว่าrmจะล้มเหลวในการทำงานบน.และ..แต่คำสั่งอื่น ๆ รวมทั้งchownและchmodอย่างมีความสุขจะมีผล)

แต่ไฟล์ที่ซ่อนของฉันทั้งหมดมีชื่อแตกต่างกัน!

ฉันควร glob สำหรับไฟล์ที่ซ่อนอยู่ทั้งหมดในขณะที่ไม่รวม.และ..?

คำตอบ:


20

คุณสามารถใช้extglobรูปแบบต่อไปนี้:

.@(!(.|))
  • .ตรงกับตัวอักษร.ในตอนแรก

  • @()เป็นextglobรูปแบบจะจับคู่หนึ่งในรูปแบบที่อยู่ภายในเนื่องจากเรามีรูปแบบเดียวเท่านั้นที่อยู่ภายใน

  • !(.|)เป็นextglobรูปแบบอื่น(ซ้อนกัน) ซึ่งตรงกับไฟล์ใด ๆ ที่ไม่มีหรือหนึ่ง.; ขณะที่เราได้จับคู่.ที่เริ่มต้นแล้วทั้งรูปแบบนี้จะตรงกับไฟล์ทั้งหมดที่เริ่มต้นด้วยการ.ยกเว้นและ...

extglobเปิดใช้งานในเซสชันโต้ตอบของbashโดยค่าเริ่มต้นใน Ubuntu ถ้าไม่ให้เปิดใช้งานก่อน:

shopt -s extglob

ตัวอย่าง:

$ echo .@(!(.|))
.bar .foo .spam

เห็นได้ชัดว่าเป็นสิ่งที่ยอดเยี่ยมที่ฉันต้องเรียนรู้! ขอบคุณสำหรับการเรียนการสอน
Zanna

@Zanna ดีใจที่ฉันสามารถช่วย :)
heemayl

2
จุดประสงค์ของการ@()คืออะไร? Simple .!(.|)ดูเหมือนว่าจะทำงานเหมือนกัน
Kyle Strand

1
ฉันรู้ว่านี่เก่า แต่ฉันมีคำถามเดียวกันกับ @KyleStrand ในการทดสอบของฉัน!(.|)ทำงานได้เหมือนกัน @()ในบริบทนี้มีจุดประสงค์อะไรบ้าง?
Paddy Landau

ตัวละครปังเป็นการปฏิเสธหรือไม่? มันไม่ได้กล่าวถึงและการอ่านคำอธิบายของคุณฉันได้รับความประทับใจว่ารูปแบบนั้นตรงกับจุดและสองเท่า แต่คุณอธิบายไฟล์ที่ตรงกับจุดเริ่มต้นได้อย่างชัดเจนยกเว้นทั้งสองอย่างนั้น
ผู้ใช้ไม่รู้จัก

20
 GLOBIGNORE=".:.."

เพื่อซ่อน และ .. ไดเรกทอรี นี่เป็นการตั้งค่าdotglobตัวเลือก:*จับคู่ไฟล์ทั้งที่ซ่อนและไม่ซ่อน

คุณสามารถทำได้

shopt -s dotglob

กิลส์ :)


9

คุณสามารถใช้findคำสั่งได้ที่นี่ ยกตัวอย่างเช่น

find -type f -name ".*" -exec chmod 775 {} \;

นี่จะค้นหาไฟล์ที่ซ่อนอยู่และเปลี่ยนการอนุญาต


แก้ไขเพื่อรวมความคิดเห็นโดย @gerrit:

find -type f -maxdepth 1 -name ".*" -exec chmod 775 {} \;

สิ่งนี้จะ จำกัด การค้นหาสูงสุดของไดเรกทอรีปัจจุบันแทนที่จะค้นหาซ้ำ


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