.sql.gz
我有一个用于查找文件并移动它们的shell 脚本代码:
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
find 提供了一个“或”(-o)运算符:
find $Path_Backup_Dir -type f -mtime $Time \( -name \*sql.gz -o -name \*.sql \)
表达式之间的默认运算符是“and”(-a)。由于“and”的优先级高于“or”,因此我们需要使用括号将两个“-name”表达式组合在一起以获得正确的逻辑。由于 shell 通常对括号进行特殊处理,因此我使用反斜杠对它们进行了转义以保护它们。
或者,您可以使用正则表达式:
find $Path_Backup_Dir -type f -mtime $Time -regex '.*\.(sql|sql.gz)'
您还应该注意,您的 find/read 命令管道无法很好地响应具有特殊名称的文件(前导空格、尾随空格、换行符等)。例如,参见本维基寻找处理该问题的方法。
答案2
只需使用“-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