วิธี mv dot files โดยไม่รวมไดเรกทอรีหลักบน linux / mac [ซ้ำ]


5

เป็นไปได้ซ้ำ:
ฉันจะเก็บ และ .. จาก. * การขยายตัว?

ฉันรู้เกี่ยวกับ

mv * ~/whatever
mv .* ~/whatever

แต่นั่นพยายามที่จะย้าย.และ..ซึ่งทำให้ฉันเจ็บปวด มีวิธีการ mv ไฟล์ทั้งหมดรวมถึง.*ไฟล์ แต่ไม่รวมไดเรกทอรีปัจจุบันและมันเป็นผู้ปกครอง?

คำตอบ:


7

เพียงแค่บอกว่าทุบตีว่ามีตัวละครตัวที่สองและมันไม่ใช่จุด จะไม่ย้ายไฟล์ชื่อเช่น..fileนี้

mv .[^.]* somewhere/

สิ่งนี้จะได้ผลในกรณีส่วนใหญ่ แต่จะไม่สนใจไฟล์และไดเรกทอรีที่ขึ้นต้นด้วยสองจุด ยกตัวอย่างเช่นหรือ..name ....name
Matteo

@Matteo: ฉันได้พูดถึงปัญหาในคำตอบแล้ว
choroba

1
@chroba ขออภัย: ควรเรียนรู้ที่จะอ่านคำตอบ :-) ทั้งหมด
มัตเตโอ

7

จากคู่มือ Bash shoptส่วน:

dotglob     If set, bash includes filenames beginning with a `.' in the results
            of pathname expansion.

shoptสามารถใช้เพื่อตั้งค่า "ตัวเลือกเชลล์" บางอย่างตามที่อธิบายไว้ในคู่มือ man bashดู

ดังนั้น

shopt -s dotglob
mv * ~/whatever

ทำในสิ่งที่คุณต้องการ ทดสอบด้วยเช่น

shopt -s dotglob
ls -d *

เพื่อดูว่าไฟล์ใดถูกจับคู่

เนื่องจากเป็นวิธีการทุบตีตามความเป็นจริงไม่น่าแปลกใจที่ซ่อนอยู่ควรเปิดขึ้นเกี่ยวกับไฟล์ที่มีชื่อที่ยุ่งยาก ถ้าเป็นเช่นนั้นจะเป็นการระบุข้อบกพร่องใน Bash


0

ลองสิ่งนี้:

mv .[a-zA-Z0-9]* ~/whatever

ยกเว้นว่าคุณมีไฟล์จุดที่ขึ้นต้นด้วย._หรือตัวอักษรอื่น ๆ ที่ไม่ใช่ตัวอักษรและตัวเลขมันควรจะได้รับทั้งหมด


0

หากคุณไม่ต้องการย้ายไดเรกทอรีสิ่งนี้จะย้ายไฟล์ทั้งหมดไปที่./foo/:

$ find . -type f  | while read n; do mv "$n" foo/; done

หากคุณต้องการทำไดเรกทอรีด้วยให้ลอง:

$ find . | grep -vP '^\.$' | while read n; do mv "$n" foo/; done

0

ใช้ค้นหาสิ่งที่ไม่รวม.และ..:

find . -name ".*" -mindepth 1 -maxdepth 1

และตรวจสอบผลลัพธ์ เพื่อย้ายไฟล์

find . -name ".*" -mindepth 1 -maxdepth 1 -exec mv {} ~/whatever \;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.