ย้ายไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันขึ้นหนึ่งไดเรกทอรี


2

ฉันได้ติดตั้ง wordpress ไปยังเซิร์ฟเวอร์ CentOS ของฉันแล้ว

ตอนนี้ในโฟลเดอร์ / var / ww / html ของฉันฉันมีโฟลเดอร์ wordpress ฉันต้องการย้ายไฟล์ทั้งหมดภายในโฟลเดอร์ 'wordpress' ขึ้นไปสู่ ​​parent dir ซึ่งก็คือ / var / www / html

ตอนนี้ฉันได้อ่านโพสต์นี้ - วิธีการย้ายไฟล์ทั้งหมดจากไดเรกทอรีปัจจุบันไปยังไดเรกทอรีบน?

และฉันได้ลองใช้คำสั่งที่แนะนำแล้วและบรรทัดคำสั่งทั้งหมดนั้นก็คือ:

[root@servername wordpress]# mv * .[^.]* ..
mv: cannot stat `*': No such file or directory

ฉันจะย้ายไฟล์ทั้งหมดไปยังหนึ่ง dir ได้อย่างไร

คำตอบ:


5

หากคุณมีทุบตี 4+ (ตรวจสอบด้วยbash --version) คุณสามารถใช้ตัวเลือกเปลือก dotglob เพื่อให้แน่ใจว่า globs รวมไฟล์ที่เริ่มต้นด้วย.โดยค่าเริ่มต้น

shopt -s dotglob ## activate dotglob
mv ./* ../
shopt -u dotglob ## deactivate dotglob

นอกเหนือจากการลดปริมาณของความคิดที่คุณต้องมอบให้กับงานนี้มันยังมีข้อได้เปรียบของการเป็นคนฉลาดพอที่จะไม่เข้าคู่.และ..ไม่ต้องยุ่ง ฉันชอบคำนำ globs ของฉันด้วย./เพื่อป้องกันไม่ให้ชื่อไฟล์ใด ๆ ที่เริ่มต้นด้วยการ-ถูกถือว่าเป็นตัวเลือก

อย่างไรก็ตามข้อผิดพลาดของคุณแสดงให้ฉันเห็นว่าคุณกำลังพยายามที่จะทำงานในไดเรกทอรีว่างเปล่าหรืออย่างน้อยหนึ่งที่มี dotfiles เท่านั้น โดยค่าเริ่มต้นหาก glob ไม่ตรงกับชื่อไฟล์ใด ๆ ทุบตีส่งมันอย่างแท้จริงไปยังคำสั่ง - และเนื่องจากไม่มีไฟล์ชื่อ*ในไดเรกทอรีmvจะส่งข้อผิดพลาดที่


เยี่ยม ... ฉันเข้าใจแล้วขอบคุณ ด้วยเหตุผลบางอย่างมันย้ายไฟล์จริงท่ามกลางข้อผิดพลาดทั้งหมดที่ฉันได้รับ แต่ขอบคุณสำหรับเคล็ดลับ
DextrousDave

1
คุณอาจพบว่าหน้านี้มีประโยชน์สำหรับการอ้างอิงในอนาคต (ทั้งเว็บไซต์นั้นเป็นข้อมูลอ้างอิงที่ดีมากสำหรับการทำงานกับ bash)
evilsoup

2

ข้อความระบุว่าไม่มีไฟล์ที่ตรงกับ '*' ตรวจสอบให้แน่ใจว่ามีไฟล์หรือโฟลเดอร์ในโฟลเดอร์ที่คุณย้ายอยู่ ถ้าเฉพาะไฟล์หรือโฟลเดอร์ที่ขึ้นต้นด้วย มีอยู่คุณสามารถเรียกใช้คำสั่งmv .[^.]* ..เพื่อย้ายพวกเขาหนึ่งไดเรกทอรีขึ้น ตรวจสอบว่าไฟล์ทั้งหมดถูกย้ายโดยการเรียกใช้ls -laและตรวจสอบว่ารายการมีเฉพาะไดเรกทอรีนี้ (.) และข้างบน (.. )


2

อย่างที่คนอื่นพูดคุณอาจใช้คำสั่งของคุณในไดเรกทอรีว่าง อีกวิธีหนึ่งในการทำเช่นนี้ (ที่ก็จะล้มเหลวอย่างเงียบ ๆ ใน directory ว่าง) คือการใช้find's -execดำเนินการ:

find . -exec mv '{}' ../ \;

สิ่งนี้จะทำให้คุณมีข้อผิดพลาด:

mv: cannot move `./' to `../.': Device or resource busy

นี่เป็นเพราะฉันไม่ได้ จำกัดfindประเภทไฟล์ดังนั้นมันจะพยายามย้ายไดเรกทอรีปัจจุบัน ( .) และล้มเหลว คุณสามารถละเว้นข้อผิดพลาดนี้ได้อย่างปลอดภัยหรือคุณสามารถระบุว่าคุณต้องการไฟล์และโฟลเดอร์ทุกประเภท:

find . \( -type f -o -type d \)   -exec echo '{}' ../ \;

จากman find:

  -exec command ;
          Execute command; true if 0 status is returned.
          All following arguments to find are  taken  to
          be  arguments to the command until an argument
          consisting of `;' is encountered.  The  string
          `{}'  is  replaced  by  the  current file name
          being processed everywhere it  occurs  in  the
          arguments  to  the  command, not just in argu‐
          ments where it is alone, as in  some  versions
          of  find.   Both  of these constructions might
          need to be escaped (with a `\') or  quoted  to
          protect them from expansion by the shell. 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.