คุณสามารถใช้คำสั่งนี้เพื่อสำรองข้อมูล dotfiles ( .<something>
) ทั้งหมดใน$HOME
ไดเรกทอรีของคุณ:
$ cd ~
$ find . -maxdepth 1 -type f -name ".*" -exec tar zcvf dotfiles.tar.gz {} +
regex ใช้ tar เพียง?
วิธีที่ # 1
ฉันค้นคว้าข้อมูลนี้มาไม่นานและว่างเปล่า ปัจจัยที่มีข้อ จำกัดtar
คือเมื่อมีการดำเนินการมันไม่รวมเครื่องหมายต่อท้ายสแลช ( /
) ที่แสดงขึ้นพร้อมกับไดเรกทอรีไม่ได้เป็นส่วนหนึ่งของสมการเมื่อ tar ดำเนินการจับคู่รูปแบบ
นี่คือตัวอย่าง:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --exclude={'.','..','.*/'} .*
.qalculate/
.qt/
.qterm/
.qtoctave/
.RapidSVN
.RData
.Rhistory
ตัวแปรนี้มีข้อยกเว้นของ.*/
และคุณสามารถเห็นได้ด้วยสวิตช์ verbose เปิดเพื่อ tar -v
ซึ่งไดเรกทอรีเหล่านี้กำลังผ่านการแยกออก
วิธีที่ # 2
ฉันคิดว่าอาจเปลี่ยน--no-wildcards-match-slash
หรือ--wildcards-match-slash
จะผ่อนคลายความโลภของ.*/
แต่ก็ไม่มีผลเช่นกัน
การนำเครื่องหมายทับออกจากการแยก.*
ไม่ได้เป็นตัวเลือกอย่างใดอย่างหนึ่งเนื่องจากจะบอกtar
ให้ยกเว้น dotfiles และ dotdirectories ทั้งหมด:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --exclude={'.','..','.*'} .*
$
วิธีการ # 3 (น่าเกลียด!)
ดังนั้นทางเลือกเดียวที่อื่น ๆ tar
ที่ฉันสามารถตั้งครรภ์คือการให้รายชื่อของไฟล์ที่จะ บางสิ่งเช่นนี้
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --wildcards-match-slash --exclude={'.','..','.*/'} $(ls -aF | grep -E "^\..*[^/]$")
.RapidSVN
.RData
.Rhistory
วิธีการนี้มีปัญหาหากจำนวนไฟล์เกินจำนวนสูงสุดของพื้นที่ว่างสำหรับการส่งอาร์กิวเมนต์ไปยังคำสั่งจะเป็นปัญหาหนึ่งที่จ้องมอง อีกอันคือมันน่าเกลียดและซับซ้อนเกินไป
แล้วเราเรียนรู้อะไร
ดูเหมือนจะไม่มีวิธีที่ตรงไปตรงมาและสง่างามที่จะเข้าใจสิ่งนี้โดยใช้tar
& การแสดงออกปกติ เพื่อที่จะแสดงความคิดเห็นของ @ terdon เป็นfind ... | tar ...
วิธีที่เหมาะสมกว่าในการทำเช่นนี้