في Linux (Ubuntu) ، كيف يمكنك نقل جميع الملفات والدلائل إلى الدليل الأصل؟
تجد . -maxdepth 1 -exec mv {} .. \؛
هذا سينتقل الملفات المخفية كذلك.
سوف تحصل على الرسالة:
mv: لا يمكن أن يتحرك `. إلى `../. ': الجهاز أو المورد مشغول
عندما يحاول نقل .
(الدليل الحالي) ولكن هذا لن يسبب أي ضرر.
جئت إلى هنا لأنني جديد في هذا الموضوع أيضًا. لسبب ما سبق لم يفعل الخدعة لي. ما فعلته لنقل جميع الملفات من dir إلى أصلها dir هو:
cd to/the/dir
mv * ../
اكتب هذا في Shell:
mv *.* ..
التي تحرك جميع الملفات مستوى واحد لأعلى.
الحرف *
هو حرف بدل. لذا ، فإن *.deb
سينقل جميع ملفات .deb ، وسيقوم Zeitgeist.*
بنقل Zeitgeist.avi و Zeitgeist.srt مجلد واحد لأعلى ، لأنه ، بالطبع ، يشير ..
إلى الدليل الأصل.
لنقل كل شيء بما في ذلك المجلدات ، وما إلى ذلك ، استخدم فقط *
بدلاً من *.*
لا يمكن أن يكون أكثر بساطة من:
mv * ../
لنقل الملفات المخفية أيضًا:
mv /path/subfolder/{.,}* /path/
mv
هو أمر لنقل الملفات ، يعني *
جميع الملفات والمجلدات و ../
هو المسار إلى الدليل الأصل.
في bash يمكنك استخدام shopt -s dotglob لجعل * تطابق جميع الملفات ونقلها ببساطة عن طريق
shopt -s dotglob; mv * ..
ليس هذا هو الحل الأفضل لأن الإعداد دائم لـ Shell حتى تقوم بتغييره
shopt -u dotglob
لكنني أعتقد أنه من الجيد أن نعرف.
find . -maxdepth 2 -type f -exec mv {} .. \;
لقد استخدمت صيغة أعلاه لنقل جميع الملفات من المجلدات الفرعية إلى الأصل.
كنت أحصل على بيانات في مجلدات حسب السنة ، ولكن وجدت باستخدام البيانات التعريفية ، فقد أضعها جميعًا في نفس المجلد مما جعل إدارتها أسهل.
على سبيل المثال.
/data/2001/file_1
/data/2002/file_2
/data/2003/file_3
طريقة لا تسبب أي أخطاء وتعمل في كل مرة:
ls -1A . | while read -r file
do
mv "./${file}" ..
done
find -type f|while read line; do mv $line ${line##*/}; done
إذا افترضنا أن جميع ملفاتك المخفية تبدأ بنقطة متبوعة بحرف أو رقم (كما ينبغي) ، فيمكنك استخدامها
mv * .[A-Za-z0-9]* ..
الجزء .[A-Za-z0-9]*
هو التأكد من أنك لا تحاول نقل .
أو ..
طوله ، مما قد يفشل.
ليست هناك حاجة لتغيير الدلائل. فقط قم بتضمين * في نهاية المسار:
mv /my/folder/child/* /my/folder/
أعلاه فقط يتحرك الملفات غير المخفية. لنقل الملفات المخفية فقط. *
mv /my/folder/child/.* /my/folder/
فوق اثنين يمكن دمجها في أمر واحد:
mv /my/folder/child/{.,}* /my/folder/
راجع أيضًا: كيفية نقل جميع الملفات بما في ذلك الملفات المخفية إلى الدليل الأصل عبر *
من السهل نقل جميع الملفات والمجلدات إلى الدليل الأصل في Linux.
انتقل إلى هذا المجلد واستخدم هذا الأمر:
mv * /the full path
على سبيل المثال ، إذا كانت الملفات والمجلدات كما يلي:
/home/abcuser/test/1.txt
2.txt
3.jpg
4.php
1folder
2folder
انتقل إلى هذا المجلد عبر القرص المضغوط:
cd /home/abcuser/test
mv * /home/abcuser
جميع الملفات والمجلدات الخاصة بك سوف تنتقل إلى مجلد abcuser (الدليل الأصل).