سؤال البرنامج النصي لتسجيلات المكالمات في مجلدات التاريخ


لدينا IP PBX الذي يقوم بتشغيل العلامة النجمية ويتم تعيينه من قبل الشركة المصنعة لحذف تسجيلات المكالمات بعد فترة زمنية معينة. أنا أؤيد هذه إلى خادم أوبونتو باستخدام rsync حتى نتمكن من تخزينها إلى أجل غير مسمى.

القضية التي لدي هي أن جميع التسجيلات كلها موضوعة في دليل واحد. يتم تسمية الملفات في نفس البنية:

year.month.day.hour.min.sec-callref-تمديد callerid.wav

ما أريد القيام به هو إعداد بنية دليل من شأنها أن تكون السنة / الشهر / اليوم (مع طلب الشهر بشكل صحيح) ، ثم نقل كل من الملفات إلى الترتيب المقابل.

ملاحظة شخصية: أنا واثق من العمل مع Ubuntu في سطر الأوامر ولكن ليس لدي خبرة في تشغيل أو تشغيل البرامج النصية حتى يتم الترحيب بالنصائح بشكل كبير. (سعيد أن تعلم!) شكرا مقدما.


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

أنا أستخدم crontab إلى rsync IPPBX إلى Ubuntu Server ، ثم آخر لتقديم هذه التسجيلات باستخدام البرنامج النصي أدناه. كل مساء ، يقوم rsync بإعادة تنزيل كافة التسجيلات حيث يعتقد أن مجلد الوجهة فارغ.

لدي سؤالان: هل يمكن دمج rsync في البرنامج النصي أدناه بحيث يتم استخدام ملف واحد؟ هل يمكن للبرنامج النصي أن يفهم ما تم تنزيله بالفعل بحيث يتم تنزيل الملفات الجديدة فقط؟


3
2018-06-30 10:03


الأصل




الأجوبة:


هذا في الواقع بسيط إلى حد ما مع باش. فقط قم بتكرار الملفات واستخراج السنة والشهر واليوم ، ثم قم بتحريكها وفقًا لذلك.

#!/usr/bin/env bash

# iterate all the wav-files that has at least 3 dots in addition to the extension
for file in *.*.*.*.wav; do

    # In the case of no files matching the glob, file will contain the glob itself
    # which will make the mkdir later on create './*/*/*'. Avoid that by testing
    # if file contains an existing file.
    [[ -e $file ]] || continue

    # split out year month and day from the filename
    IFS=. read -r year month day _ <<< "$file"

    # make sure the directories exist, then move it
    mkdir -p "./$year/$month/$day" &&
    mv "./$file" "./$year/$month/$day"
done

3
2018-06-30 10:44



Geriha ، شكرا على السيناريو. كيف يمكنني تحديد أي مجلد لتشغيل هذا البرنامج النصي؟ أو هل يمكنني تشغيله في المجلد الأصلي الذي توجد فيه الملفات؟ - BatchHeader
BatchHeader ، نفس dir كملفات ، نعم. احفظ النص البرمجي في مكان ما في PATH ، على سبيل المثال ، ~/bin/filerecs أو /usr/local/bin/filerecs وجعلها قابلة للتنفيذ chmod +x /usr/local/bin/filerecs. لاستخدامه ، قم بالتغيير إلى الدليل الصحيح cd /path/to/recordings، ثم اركض filerecs. - geirha