У меня есть код сценария оболочки, который находит .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
, так как я могу изменить свой код выше, чтобы он также включает в себя это расширение файла. Благодаря.
find предлагает оператор «или» (-o):
find $Path_Backup_Dir -type f -mtime $Time \( -name \*sql.gz -o -name \*.sql \)
Оператор по умолчанию между выражениями - «и» (-a). Так как «и» имеет более высокий приоритет, чем «или», нам нужно использовать парены, чтобы сгруппировать два выражения «-name» вместе, чтобы получить правильную логику. Поскольку раковины обычно относятся к паренсу специально, я избежал их обратной косой черты, чтобы защитить их.
В качестве альтернативы вы можете использовать регулярное выражение:
find $Path_Backup_Dir -type f -mtime $Time -regex '.*\.(sql|sql.gz)'
Следует также отметить, что ваш конвейер команд поиска / чтения не будет хорошо реагировать на файлы со специальными именами (начальные пробелы, пробелы, так далее.). См., Например, в этой вики способы решения этой проблемы.
Просто используйте оператор «-или»:
#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