سؤال البحث عن ملفات .sql و .sql.gz باستخدام الأمر find


لدي رمز نصي قذيفة التي تجد .sql.gz الملفات وتحريكها:

find $Dir -type f -mtime $Time -name \*sql.gz | while read file
do
    echo "Earlier $file will be moved to different folder." >> $Path_Log_File
    mv -f $file $Path_Folder
done

الآن لدي عدد قليل من الملفات بالامتداد .sql لذا كيف يمكنني تعديل الكود أعلاه بحيث يتضمن امتداد الملف هذا أيضًا. شكر.


1
2017-12-02 06:42


الأصل




الأجوبة:


العثور على عروض "أو" (-o) المشغل:

find $Path_Backup_Dir -type f -mtime $Time \( -name \*sql.gz -o -name \*.sql \)

العامل الافتراضي بين التعبيرات هو "و" (-a). بما أن "و" لها أولوية أعلى من "أو" ، نحتاج إلى استخدام parens لتجميع تعبيرين "-name" معًا للحصول على المنطق الصحيح. لأن الأصداف عادةً ما تعالج الآباء خصيصًا ، فقد أفلت منها باستخدام شرطة مائلة للخلف لحمايتها.

بدلاً من ذلك ، يمكنك استخدام تعبير عادي:

find $Path_Backup_Dir -type f -mtime $Time -regex '.*\.(sql|sql.gz)'

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


3
2017-12-02 06:59





ما عليك سوى استخدام عامل التشغيل "-or":

#Find and Move backup files older than the time constraint defined
find $Path_Backup_Dir -type f -mtime $Time \( -name *sql.gz -or -name *sql \) | while read file
do
    echo "Earlier Backup $file will be moved to archive folder." >> $Path_Log_File
    mv -f $file $Path_Mysql_Archive
done

يمكنك القيام بكل ذلك باستخدام أمر واحد:

find $Path_Backup_Dir -type f \( -name *.sql -or -name *.sql.gz \) -exec mv -f -v {} /tmp/test2 \; >> $Path_Log_File

2
2017-12-02 07:35



يعطي الخطأ: find: paths must precede expression: 01-09-2013.tar.gz Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression] - Tarun
هل لديك أحرف الفضاء في المسار الخاص بك؟ اهرب منهم أو استخدم الاقتباس المزدوج ، اعثر على "$ Path_Backup_Dir" - Quentin
لا يوجد أي شخصية الفضاء مثل /backup/dump/database/11-12-2013.sql فمثلا. - Tarun