ls, find and grep‘s parameters and xargs

本文详细介绍Linux环境下find、grep、ls及xargs等常用命令的使用方法与参数选项,帮助读者掌握如何高效地进行文件搜索、文本查找及命令处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

含子目录指令文件名搜索字符串

find . -name 文件名 | xargs grep 字符串

ls

详情显示所有文件+目录(无子目录),自动选择大小的单位。参数都啥意思我也忘了:

ls -ABhlp

紧凑(用逗号分隔)显示:

ls -m

每行一个:

ls -1

按自然数字排序,等同于

sort --version-sort -f

ls -v

以日期排序显示:

ls -ltr
or
ls -lt

只列出目录名,不显示文件名

ls -d */

find

-maxdepth how deep to search to

-mindepth  how deep to search from

-mtime 指定文件修改日期。后面加'-数字'找到指定天数之后的,加'+数字'找到指定天数之前的

-mmin 指定文件修改分钟,与mtime类似

-atime,amin 与mtime,mmin类似,根据访问时间

-ctime,cmin 与mtime,mmin类似,根据状态变化时间

-newerXY 与xtime,xmin类似,时间根据更灵活

-ok 与exec相同,但是执行前进行询问

-exec command ; 分号需要转义,'{}'为搜索到的文件名

-delete       delete files

-ls               list files

-type d       directories only

-type f        normal files only

-user limit to owner

-printf         too much, refer to manual 

grep

在子目录中搜索文本:

查找当前目录及子目录下所有含指定字符的指定类型文件,显示文件名、行号,换色显示所查找字符:

grep -r --include=正则表达式 -n -C行数 --color=always "字符串" *

-C 表示前后多显示几行

如果想忽略大小写可加 -i

如果想按词查找可加 -w

同时过滤多个词:-E '词|词'。如果是Windows,用"替换'

如果想只显示文件名则用-l

正则表达式如:*.[ch]则所有后缀名为c或h的文件

xargs

对命令逐个运行输入(以空格分隔)。比如将find结果管道输出到xargs命令,后面加其它命令,就可以对所有找到的文件执行该命令

xargs 参数 命令 命令参数

参数:

-I 字符 将命令参数中对应字符替换为输入

--interactive

-p 确认每次运行命令

--no-run-if-empty

-r 如果没有非空格输入则不运行命令

--verbose

-t 显示每次运行的命令行

--null

-0 以空字符而非空格分隔输入,引号和反斜杠也视为普通字符

pipeline { agent { node { label "master" } } environment { APPS = "ui-admin" DIST_OUTPUT_DIR = "/opt/node" BACKUP_DIR = "/data/bakup" // 新增备份目录 } options { buildDiscarder(logRotator(daysToKeepStr: '30', numToKeepStr: '10')) disableConcurrentBuilds() timeout(time: 30, unit: 'MINUTES') skipDefaultCheckout(true) } parameters { gitParameter( name: 'branch', branchFilter: '.*', defaultValue: 'master', description: '选择构建分支,默认是 master 分支', quickFilterEnabled: true, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH_TAG', useRepository: "https://gitlab.ar.org.ai/web-development/ar-ui-payment/ar-ui-admin.git" ) choice( name: 'ACTION', choices: ['DEPLOY', 'ROLLBACK'], description: '选择操作类型:部署或回滚' ) string( name: 'ROLLBACK_VERSION', defaultValue: '', description: '输入要回滚的备份版本(格式:build-123)' ) } stages { stage('📦 初始化参数') { steps { script { if (params.ACTION == 'ROLLBACK') { echo "执行回滚操作,目标版本: ${params.ROLLBACK_VERSION}" } else { echo "开始构建分支: ${params.branch}" } } } } stage('📥 拉取代码') { when { expression { params.ACTION == 'DEPLOY' } } steps { checkout([ $class: 'GitSCM', branches: [[name: "${params.branch}"]], extensions: [], userRemoteConfigs: [[ credentialsId: 'git', url: "https://gitlab.ar.org.ai/web-development/ar-ui-payment/ar-ui-admin.git" ]] ]) } } stage('📦 安装依赖 & 构建前端') { when { expression { params.ACTION == 'DEPLOY' } } steps { sh ''' npm install -g pnpm pnpm config set registry https://registry.npmmirror.com/ pnpm install pnpm run build:local ''' } } stage('📁 创建备份') { when { expression { params.ACTION == 'DEPLOY' } } steps { script { // 创建带构建号的备份目录 def backupPath = "${env.BACKUP_DIR}/build-${env.BUILD_NUMBER}" sh """ mkdir -p ${backupPath} echo "备份时间: \$(date)" > ${backupPath}/backup.info echo "构建分支: ${params.branch}" >> ${backupPath}/backup.info echo "构建号: ${env.BUILD_NUMBER}" >> ${backupPath}/backup.info """ // 备份构建产物 sh """ cp -r dist/* ${backupPath}/ """ echo "✅ 备份完成:${backupPath}" } } } stage('🚀 部署/回滚') { steps { script { if (params.ACTION == 'DEPLOY') { // 正常部署流程 sh """ mkdir -p ${DIST_OUTPUT_DIR}/${APPS} rm -rf ${DIST_OUTPUT_DIR}/${APPS}/* cp -r dist/* ${DIST_OUTPUT_DIR}/${APPS}/ """ withCredentials([usernamePassword(credentialsId: 'deploy-key', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh """ sshpass -p "$PASSWORD" scp -o StrictHostKeyChecking=no -r ${DIST_OUTPUT_DIR}/${APPS}/* $USERNAME@47.236.250.73:/data/www/html/ """ } echo "✅ 部署完成,目标路径:/data/www/html/" } else { // 回滚流程 def rollbackPath = "${env.BACKUP_DIR}/${params.ROLLBACK_VERSION}" // 验证备份是否存在 def backupExists = fileExists rollbackPath if (!backupExists) { error "❌ 备份版本 ${params.ROLLBACK_VERSION} 不存在!" } withCredentials([usernamePassword(credentialsId: 'deploy-key', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh """ sshpass -p "$PASSWORD" scp -o StrictHostKeyChecking=no -r ${rollbackPath}/* $USERNAME@47.236.250.73:/data/www/html/ """ } echo "✅ 回滚完成:${params.ROLLBACK_VERSION} 已部署" } } } } } post { success { script { if (params.ACTION == 'DEPLOY') { echo "🎉 构建成功,dist 已输出并分发完成" echo "备份位置: ${env.BACKUP_DIR}/build-${env.BUILD_NUMBER}" } else { echo "🔄 回滚操作成功完成" } } } failure { echo "💥 操作失败,请查看控制台日志" } always { // 自动清理旧备份(保留最近10个) sh """ cd ${env.BACKUP_DIR} ls -t | tail -n +11 | xargs rm -rf -- """ } } } 这个是获取jenkins的保存天数才去自动清理旧备份(保留最近10个)也是根据天去判断
07-31
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值