1. 删除历史日志
find /home/XXX/logs/ -type f -name '*.log' -mtime +10 -exec rm -f {} \;
find ${base_dir}/logs/ -mtime +7 -name "*.log" | xargs rm -rf
2.批量chmod +x
find ./ -type f -name '*.sh' -exec chmod +x {} \;
find ./ -name "*.sh" | xargs chmod +x
find ./JOB_xxx/ -name "*.sh" | xargs chmod +x
3. python 操作文件夹(参考)
import shutil
import os
from pathlib import Path
# 第一种:删除一个文件夹,无论里面是否有文件或文件夹
# (不支持文件,文件夹不存在会报错)
def del_files0(dir_path):
shutil.rmtree(dir_path)
# 第二种 递归删除dir_path目标文件夹下所有文件,以及各级子文件夹下文件,保留各级空文件夹
# (支持文件,文件夹不存在不报错)
def del_files(dir_path):
if os.path.isfile(dir_path):
try:
os.remove(dir_path) # 这个可以删除单个文件,不能删除文件夹
except BaseException as e:
print(e)
elif os.path.isdir(dir_path):
file_lis = os.listdir(dir_path)
for file_name in file_lis:
# if file_name != 'wibot.log':
tf = os.path.join(dir_path, file_name)
del_files(tf)
print('ok')
# 第三种: 删除dir_path目标文件夹下所有内容,保留dir_path文件夹
# (不支持文件,文件夹不存在会报错)
def del_files2(dir_path):
# os.walk会得到dir_path下各个后代文件夹和其中的文件的三元组列表,顺序自内而外排列,
# 如 log下有111文件夹,111下有222文件夹:[('D:\\log\\111\\222', [], ['22.py']), ('D:\\log\\111', ['222'], ['11.py']), ('D:\\log', ['111'], ['00.py'])]
for root, dirs, files in os.walk(dir_path, topdown=False):
print(root) # 各级文件夹绝对路径
print(dirs) # root下一级文件夹名称列表,如 ['文件夹1','文件夹2']
print(files) # root下文件名列表,如 ['文件1','文件2']
# 第一步:删除文件
for name in files:
os.remove(os.path.join(root, name)) # 删除文件
# 第二步:删除空文件夹
for name in dirs:
os.rmdir(os.path.join(root, name)) # 删除一个空目录
if __name__ == '__main__':
dir_path = Path('./log').absolute()
del_files2(dir_path)
4. sed 命令
# 对每行匹配到的第一个字符串进行替换
sed -i 's/原字符串/新字符串/' ab.txt
# 对全局匹配上的所有字符串进行替换
sed -i 's/原字符串/新字符串/g' ab.txt
# 删除所有匹配到字符串的行
sed -i '/匹配字符串/d' ab.txt
# 特定字符串的行后插入新行
sed -i '/特定字符串/a 新行字符串' ab.txt
# 特定字符串的行前插入新行
sed -i '/特定字符串/i 新行字符串' ab.txt
# 把匹配行中的某个字符串替换为目标字符串
sed -i '/匹配字符串/s/源字符串/目标字符串/g' ab.txt
# 在文件ab.txt中的末行之后,添加bye
sed -i '$a bye' ab.txt
# 对于文件第3行,把匹配上的所有字符串进行替换
sed -i '3s/原字符串/新字符串/g' ab.txt
5.监控账号密码过期时间,并发邮件
#!/bin/bash
today=`date "+%Y%m%d" -d "0 day ago"`
# [sudo] password for hadoopuser:
expire_str=`echo 'passwordXXX' | sudo -S chage -l hadoopuser | grep "Password expires" | awk -F ":" '{print $2}' | sed 's/ //'`
#expire_str=`'sudo chage -l hadoopuser | grep "Password expires" | awk -F ":" '{print $2}' | sed 's/ //'`
# 执行一次chage -l hadoopuser, 直接获取日期,将这个日期放在此处
##expire_str="20230331"
expire_dt=`date -d "${expire_str} +0 day" +"%Y%m%d"`
echo "today date is: ${today}"
echo "expire date is : ${expire_dt}"
# date to sec
today_sec=`date -d "$today" +%s`
expire_sec=`date -d "$expire_dt" +%s`
echo "today timestamp is: ${today_sec}"
echo "expire timestamp is : ${expire_sec}"
# sec diff
diff_sec=`expr ${expire_sec} - ${today_sec}`
echo ${diff_sec}
#cal days
diff_day=$(expr $diff_sec/86400)
diff_day=$[diff_day]
receiver="XXX@XXX.com"
subject="XX Env hadoopuser Password Expiring Reminder"
content="XX Env hadoopuser password will be expired ${diff_day} days ago"
# whether to send mail
if [ ${diff_day} -le 15 ];
then
echo "will send a mail to developer"
curl https://XXXXXXX -H "token:XXX" -X POST -F "receiver=${receiver}" -F "subject=${subject}" -F "content=${content}"
echo "send a mail done"
else
echo "will not send mail to developer"
fi
echo "========>>>>>>>> done with ${today}"
# del his log
find /home/XXX/logs/ -type f -name '*.log' -mtime +100 -exec rm -f {} \;
6. grep命令
1. 查找当前目录文件包含 "XXX"的文件,并打印出“XXX”出现的行号
grep -rn "XXX"
7. 批量修改
-- 批量复制
hadoop fs -ls s3://XXX/2022-07-01/ | grep ".parquet" | awk -F " " '{print $8}' | xargs -I {} hadoop fs -cp {} s3://XXX/test/
-- 批量改名
hadoop fs -ls s3://XXX/2022-07-01/ | grep ".parquet" | awk -F "/" '{print $7}' | xargs -I {} hadoop fs -mv s3://XXX/2022-07-01/{} s3://XXX/test/{}.orc