วิธีการให้ 'ค้นหา' ไม่ส่งคืนไดเรกทอรีปัจจุบัน


11

ฉันกำลังพยายามfind(และคัดลอก) ไฟล์และโครงสร้างโฟลเดอร์ทั้งหมดที่ตรงกับรูปแบบเฉพาะในไดเรกทอรีที่ระบุและฉันเกือบจะถึงแล้ว!

โดยเฉพาะฉันต้องการคัดลอกโฟลเดอร์ทั้งหมดซ้ำโดยไม่ใช้อักขระ '_' ซ้ำจากพา ธ ที่ระบุ

find /source/path/with/directories -maxdepth 1 -type d ! -name _\* -exec cp -R {} /destination/path \;

ใน / source / path / with / directory / path เป็นไดเรกทอรีเฉพาะเครื่องที่ขึ้นต้นด้วย '_' และอื่น ๆ และฉันสนใจคัดลอกไฟล์อื่น ๆ ด้วยเหตุผลนอกเหนือจากฉันคำสั่ง find จะส่งคืนไดเร็กทอรี / source / path / with / directory / / ดังนั้นจึงคัดลอกเนื้อหา

ใครมีคำใบ้ว่าทำไมถึงเป็นเช่นนั้น?

ขอบคุณ

ปาสคาล


คำตอบ:


14

find_ผลตอบแทนเส้นทางรากเพราะมันตรงกับเกณฑ์คือมันเป็นไดเรกทอรีและมันไม่ได้เริ่มต้นด้วย

คุณกำลังมองหา-mindepth 1ฉันสงสัย:

$ cd /tmp
$ mkdir a
$ touch a/b
$ mkdir a/c
$ touch a/c/d
$ find a
a
a/b
a/c
a/c/d
$ find a -mindepth 1
a/b
a/c
a/c/d

การอ้างอิง: ค้นหา manpage


ยอดเยี่ยม ทำงานตามที่ฉันต้องการ ฉันใช้งานได้โดยเพิ่ม! -name 'แฟ้ม' แต่ก็รู้สึกผิดที่ฉัน ...
pinpin

0

เปลี่ยนจาก:

find /source/path/with/directories ...

ถึง:

(shopt -s dotglob; find /source/path/with/directories/* ... )

วิธีการที่/source/path/with/directoriesจะไม่รวม

shopt -s dotglobเพื่อให้*ยังจะตรงกับไฟล์และไดเรกทอรีที่เริ่มต้นด้วย.(ไฟล์ที่ซ่อนไดเรกทอรี)

และสิ่งที่ทั้งเป็นห่อย่อยเปลือก(...)เพื่อ จำกัด ผลกระทบของเฉพาะภายในย่อยเปลือกมิฉะนั้นคุณจะต้องยกเลิกในภายหลังด้วยshoptshopt -u dotglob


.ที่จะล้มเหลวสำหรับรายการไดเรกทอรีที่เริ่มต้นด้วย อย่าพยายาม.*อย่างใดอย่างหนึ่งหรือคุณจะตรงกับสิ่งอื่น ๆ ทั้งหมดที่คุณไม่เคยตั้งใจ ;-)
zigg

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