تسطيح دليل متداخل & تسلسل هرمي للملفات من سطر الأوامر لنظام التشغيل Mac OS X
هل سبق لك أن احتجت إلى تسوية بنية الدليل ، ونقل جميع محتويات الملف من مجلدات فرعية إلى مجلدات واحدة؟ بينما يمكنك القيام بذلك يدويًا عن طريق التنقل بين الملفات والمجلدات من نظام الملفات في نظام التشغيل Mac OS X أو Linux ، فإن الخيار الأسرع هو الانتقال إلى سطر الأوامر. ربما قمت في وقت ما بإنشاء تسلسل هرمي متداخل من الدلائل التي تحتاج الآن إلى التراجع عن طريق نقل جميع الملفات من تلك المجلدات المتداخلة والعودة إلى دليل واحد ، أو ربما تبحث عن تبسيط بنية الدليل ، مهما كان السبب ، هذا خدعة تعمل بشكل جيد.
من الواضح أن استخدام سطر الأوامر لإنجاز تسوية الملفات وهياكل الدليل هو الأفضل للمستخدمين المتقدمين الذين يشعرون بالراحة عند استخدام الجهاز الطرفي بشكل عام ، إذا لم يصفك ذلك ، ففكر في القيام بذلك يدويًا من خلال Finder ، أو استخدام تطبيق Mac Automator لإنجاز أتمتة مماثلة لأنشطة نظام الملفات. ومع ذلك ، فإننا نركز على تسوية الدليل من سطر الأوامر هنا.
مثال على تسوية دليل الملفات المتداخلة
لفهم ما نحاول تحقيقه بشكل أفضل ، دعنا نأخذ مثالاً لهيكل دليل وهمي يسمى TestDirectory الموجود في مجلد الصفحة الرئيسية للمستخدم. في هذا المثال ، يحتوي TestDirectory على مجلدات فرعية مثل SubDirectory1 و SubDirectory2 و SubDirectory3 وما إلى ذلك ، وكل منها يحتوي على ملفات في تلك المجلدات المعنية. ما نتطلع إلى القيام به هنا هو تسوية بنية الدليل ، ونقل جميع الملفات من الدليل الفرعي (X) إلى الدليل الأصلي "TestDirectory".قد يبدو الدليل الأولي والمحتويات التي تظهر بشكل متكرر مع الرمز كما يلي:
$ find ~ / TestDirectory / -type f ~ / TestDirectory / rooty.jpg ~ / TestDirectory / SampleDirectory1 / beta-tool-preview.jpg ~ / TestDirectory / SampleDirectory1 /alphabeta-tool.jpg ~ / TestDirectory / SampleDirectory2 / test-tools.jpg ~ / TestDirectory / SampleDirectory3 / test-png.jpg ~ / TestDirectory / SampleDirectory3 / test1.jpg ~ / TestDirectory / SampleDirectory3 / test2.jpg
لتسوية محتويات هذا الدليل والدليل الفرعي مرة أخرى في مجلد TestDirectory ، يمكنك استخدام سلسلة الأوامر التالية:
find TargetDirectory / -mindepth 2 -type f -exec mv -i '{}' TargetDirectory / '؛'
بعد تسوية محتويات الدليل ، يجب أن تبدو هكذا عند إدراجها:
~ / TestDirectory / rooty.jpg ~ / TestDirectory / beta-tool-preview.jpg ~ / TestDirectory / alphabeta-tool.jpg ~ / TestDirectory / test-tools .jpg ~ / TestDirectory / test-png.jpg ~ / TestDirectory / test1.jpg ~ / TestDirectory / test2.jpg
لاحظ أن الدلائل الفرعية ستظل موجودة ، وستكون فارغة فقط. منطقي؟ إذا لم يكن الأمر كذلك ، أو إذا لم يوضح ذلك ما تريد تحقيقه ، فربما لا ترغب في تسطيح دليل على الإطلاق ، فربما تتطلع إلى الدمج أو استخدام نفس الشيء لعمل نسخة معقدة في مكان آخر.
تسطيح بنية الدليل والتسلسل الهرمي للملفات المتداخلة باستخدام سطر الأوامر
هل أنت جاهز للمتابعة؟ سلسلة الأوامر التي سنستخدمها لتسوية بنية الدليل ونقل جميع الملفات من الدلائل الفرعية إلى قاعدة الدليل الهدف هي كما يلي:
find -mindepth 2 -type f -exec mv -i '{}' '؛'
استبدل بالدليل الذي تختاره للتسوية ، كما هو موضح في المثال أعلاه.
نعم ، يظهر الدليل مرتين في سلسلة الأوامر ، المرة الأولى التي يتم البحث فيها عن الدليل لتسوية الدلائل الفرعية لـ ، والمرة الثانية كوجهة للعناصر التي تم العثور عليها.
كن دقيقًا مع الوجهة المحددة ، لأن هذا لا يمكن عكسه (حسنًا ، على الأقل بدون الكثير من العمل اليدوي من جانبك) ، لذلك لا تفعل ذلك إلا إذا كنت متأكدًا تمامًا من رغبتك في الانتقال عودة جميع الملفات الموجودة في الدلائل الهدف إلى مجلد الجذر الهدف
كما ذكرنا سابقًا ، يمكنك أيضًا القيام بذلك في Finder في OS X ، أو على الأقل ملاحظة تغييرات الملف والمجلد في Finder. يفتح الخيار + النقر فوق الأسهم الصغيرة في عرض القائمة جميع الأدلة الفرعية ، ويعرض التسلسل الهرمي للمجلدات مثل هذا:
بعد العبث بمجموعة متنوعة من بدائل bash و zsh ، ترك أحد المعلقين هذه الخدعة المفيدة على StackExcange وانتهى بها الأمر لتصبح الطريقة الأسهل والأكثر توافقًا. إذا كنت تعرف طريقة أفضل لتسوية دليل متداخل ، فأخبرنا بذلك في التعليقات!