سؤال نقل جميع الملفات من نوع معين أو تمديد


لديّ خارجي كبير يحتوي على العديد من المجلدات الفرعية التي أريد نقل كافة مقاطع الفيديو والصور والموسيقى إلى محرك أقراص ثابت آخر ، فما هي أفضل طريقة للقيام بذلك؟


2
2017-08-08 19:58


الأصل


stackoverflow.com/questions/18338322/... - dan08
يبدو ذلك مشابهاً لما أحاول القيام به ، ولكنني أود فقط نقله إلى جميع الملفات الموجودة في دليل آخر. عذراً ، أنا جديد جداً في سطر الأوامر ولست متأكداً من كيفية تغيير ذلك للقيام بذلك بنفسي. - Daniel


الأجوبة:


سأجرب شيئًا مثل ..

for files in $(find / | grep -P "([.]mp3$)|([.]avi$)")
do
cp $files /media/<your_external_drive>/target_folder/
done

يجب عليك إضافة كل ملحق تريد البحث عنه في تعبير عادي إذا كنت تريد القيام بكل ذلك في لقطة واحدة.

أو إذا كنت تريد ببساطة نقل الأدلة ، يمكنك استخدامها ،

cp -r /target/dir/on/machine /target/dir/on/external/drive

لكل دليل يحتوي على ملفات الوسائط الخاصة بك.


1
2017-08-08 20:04



هذا يبدو مثاليا ، الآن كيف يمكنني تحديد للعثور عليه أن ننظر فيها؟ - Daniel
تريد ان تقول find /path/to/your/target/directoryحيث يشير المسار إلى الدليل المستهدف إلى شيء ما مثل / home / username / Music أو / home / username / Video. المثال أعلاه حيث استخدمت find / ، يحدد أن البحث يجب أن يتكرر من خلال نظام الملفات المتوفر بأكمله ، وهو دائمًا غير ضروري إلى حدٍ كبير ، ولكن الناتج جميل جدًا. - blanket_cat
هل تلك الأقواس والاقتباسات صحيحة؟ - Tim
هم الآن ، صيد جيد. - blanket_cat


انا لست متاكد بالتأكيد إذا كنت تريد نقل العديد من الملفات من العديد من الأدلة ، فإليك الأمر الأساسي للبحث عن الملفات ذات الإضافات المتعددة في بنية دليل واحدة:

find /path/to/look/ -type f \( -iname \*.mp3 -o -iname \*.avi -o -iname \*.mp4 \)

من الواضح أنك تريد أن تضيف المزيد -o -iname ... على ذلك حتى تكون متأكدًا من العثور على جميع الملفات التي تريدها. عندما يكون لديك كل شيء ، فقط أضف هذا إلى النهاية:

-exec mv -t /path/to/destination {} +

وسيتم نقلهم جميعًا إلى الدليل المحدد.


إن طريقة Bashier للقيام بذلك ستكون باستخدام عدد قليل من معدّلات التحذير (globstar للبحث متكررة مع **، nullglob لإرجاع ملفات صالحة فقط nocaseglob لتجاهل القضية) ثم تمريرها إلى mv بطريقة بسيطة for عقدة:

shopt -s globstar nullglob nocaseglob
for f in /path/to/look/{**/,}*.{mp3,avi,mp4}; do
  mv "$f" /path/to/destination/
done

1
2017-08-10 00:00





أنا أوصى البرنامج FreeFileSync. إنه أمر رائع ليس فقط لمزامنة اثنين من الدلائل ، ولكن أيضا للمهمة التي لديك في الاعتبار. يمكنك إضافة فلاتر لتضمين أو استبعاد أنماط. أولاً ، استعرض فقط إلى الأصل على اليسار والجهة المقصودة على اليمين. ثم انقر فوق مقارنة للبحث من خلال جميع الملفات الخاصة بك. وأخيرًا ، انقر على مسار التحويل الأحمر في الأعلى لتعديل الفلاتر.

بالنسبة إلى الفلاتر ، تضع كل نمط على سطر جديد. يمكنك استبدال * في القسم يتضمن شيئًا كالتالي وترك قسم الاستثناءات دون مساس. سوف ينتقل ما يلي فقط ملفات mp3 و avi و jpg:

*.mp3
*.avi
*.jpg

أو إذا تركت * في المقطع "تضمين" ، يمكنك قول الملفات التي لا تريد نقلها. ستتم إضافة ما يلي إلى قسم الاستبعاد كل شيء ما عدا ملفات txt و odt و pdf:

*.txt
*.odt
*.pdf

بمجرد قيامك بإجراء التغييرات وإغلاق مربع الحوار "عامل التصفية" ، ستصبح الملفات التي لن يتم نقلها باللون الرمادي. تسمح لك الأزرار الموجودة أسفل "تحديد عرض:" بتغيير الملفات التي يتم عرضها (لا تؤثر هذه الأزرار على الملفات التي سيتم نقلها). عرض ملفات "عدم فعل شيء" فقط عن طريق تحديد الشريط الرمادي المحدد فقط ، والبحث عن أي شيء تريد نقله ولن يكون كذلك ، وقم بتعديل الفلاتر وفقًا لذلك. وبالمثل ، يتم عرض الملفات التي سيتم نقلها فقط من خلال تحديد السهم الأخضر المحدد فقط ، وابحث عن أي الملفات التي سيتم نقلها ولكنك لا تريد أن تكون وتعديل الفلاتر وفقًا لذلك.


0
2017-08-08 20:13





يمكنك استخدام البرنامج النصي الثعباني البسيط للقيام بهذه المهمة:

#!/usr/bin/env python3

import os
import shutil

source_dir = "/path/to/files"; target_folder = "/path/to/destination"; extensions = (".mp3", ".avi")

for root, dirs, files in os.walk(source_dir):
    for name in files:
        if name.endswith(extensions):
            file = root+"/"+name
            shutil.move(file, target_folder+"/"+name)

الصق الكود أعلاه في ملف نصي فارغ ، وأدخل الأدلة المستهدفة والمصدر ، وأدخل امتدادات الملفات التي تريد نقلها ، وحفظها move.py وتشغيله بالأمر:

python3 /path/to/move.py

لتجنب استبدال النسخ المكررة المحتملة (وإعادة تسميتها)

إذا كان هناك خطر من احتواء الدليل على نسخ مكررة (أسماء) ترغب في الاحتفاظ بها ، فإن الشفرة أكثر اتساعًا قليلاً:

#!/usr/bin/env python3

import os
import shutil

source_dir = "/path/to/files"; target_folder = "/path/to/destination"; extensions = (".mp3", ".avi")

dup = 1
for root, dirs, files in os.walk(source_dir):
    for name in files:
        if name.endswith(extensions):
            file = root+"/"+name
            while os.path.exists(target_folder+"/"+name):
                name = name[:name.rfind(".")]+"_"+str(dup)+name[name.rfind("."):]
                dup = dup+1
            shutil.move(file, target_folder+"/"+name)

في هذه الحالة ، عدة مناسبات من file.mp3 سيتم تغيير اسمه إلى:

file.mp3
file_1.mp3
file_2.mp3
...etc.

0
2017-08-10 06:56