LinuxShell文件操作实践_批量处理解析【教程】
发布时间 - 2026-01-02 00:00:00 点击率:次常见原因:find 默认不递归符号链接,sed -i 在 macOS 需备份后缀(如 sed -i ''),Linux 则无需;跨平台建议用 perl -i -pe 或预检 file/grep,-path 与 -prune 可排除 node_modules 等目录。
用 find + sed 批量替换文件内容,但部分文件没生效?
常见原因是 find 默认不递归进入符号链接目录,或 sed -i 在不同系统行为不一致(GNU vs BSD)。macOS 的 sed -i 要求带备份后缀,而 Linux 不需要,直接写 sed -i 's/old/new/g' file 会在 macOS 报错。
- 跨平台安全写法:用
find . -type f -name "*.txt" -exec sed -i '' 's/foo/bar/g' {} +(macOS);Linux 则用sed -i 's/foo/bar/g' {} +,或统一用perl -i -pe 's/foo/bar/g'避免差异 - 确保只处理文本文件:加
-exec file {} \; | grep "text"预检,或用grep -l "target" {}先筛选再操作 -
find的-path和-prune组合可跳过node_modules或.git目录,避免误改
批量重命名文件时,rename 命令报 “command not found”?
因为 rename 不是 POSIX 标准命令,Ubuntu/Debian 自带的是 Perl 版本,CentOS/RHEL 默认不预装,且存在两个主流实现(Perl 和 util-linux),参数语法完全不同。
- 检查是否存在:
command -v rename;若无,Ubuntu 运行sudo apt install rename,CentOS 用sudo yum install prename(即 Perl 版) - 确认版本:
rename --version输出含 “Perl” 才支持正则,否则可能是 util-linux 版(仅支持通配符,如rename 'foo' 'bar' *.log) - 安全起见,先用
ls | rena测试(
me -n 's/\.LOG$/.log/'-n表示 dry-run),避免误覆盖
用 for 循环处理含空格的文件名,结果中途中断?
默认的 for f in * 按 $IFS(含空格、制表符、换行)分割,遇到 my file.txt 会被拆成 my 和 file.txt 两个迭代项。
- 正确做法:用
while read -r配合find -print0,例如:find . -type f -name "*.log" -print0 | while read -r -d '' file; do gzip "$file" done
- 或临时修改 IFS:
IFS=$'\n'; for f in $(find . -type f -name "*.log"); do ...; done; unset IFS - 绝对不要用
for f in $(ls *.log)——ls输出不可靠,且无法处理隐藏文件和特殊字符
想用 rsync 同步并删除源中已不存在的文件,但 --delete 没起作用?
--delete 只在目标为“目录”且使用 rsync -av source/ dest/(注意结尾斜杠)时才生效。漏掉斜杠、路径写反、或没加 --delete 的前置条件(如 --delete-before 或 --delete-after)都会导致静默失败。
- 必须保证源路径以
/结尾(rsync -av /src/ /dst/),否则 rsync 会把整个/src目录复制进去,而非同步其内容 -
--delete默认只在目标端删除,且要求双方目录结构已存在;首次同步建议先跑一次--dry-run看输出 - 生产环境务必加
--dry-run和--itemize-changes,确认哪些文件将被删除后再执行
grep 找不到内容、diff 显示大量假差异、或循环跳过某些文件。动手前先用 file 和 head -n1 | od -c 快速探查样本文件特征。
# linux
# centos
# git
# node
# 编码
# ubuntu
# mac
# macos
# cos
# perl
# for
# while
# 递归
# 循环
# delete
# gnu
# debian
# 只在
# 报错
# 先用
# 跳过
# 的是
# 首次
# 不需要
# 找不到
# 会在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel PHP版本要求一览_Laravel各版本环境要求对照
jQuery 常见小例汇总
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何在建站主机中优化服务器配置?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
如何构建满足综合性能需求的优质建站方案?
Thinkphp 中 distinct 的用法解析
南京网站制作费用,南京远驱官方网站?
高防服务器如何保障网站安全无虞?
手机软键盘弹出时影响布局的解决方法
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
EditPlus中的正则表达式 实战(1)
网站建设保证美观性,需要考虑的几点问题!
Laravel如何使用模型观察者?(Observer代码示例)
如何在云主机上快速搭建网站?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
香港服务器建站指南:免备案优势与SEO优化技巧全解析
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
Python高阶函数应用_函数作为参数说明【指导】
如何登录建站主机?访问步骤全解析
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何安全更换建站之星模板并保留数据?
如何快速搭建二级域名独立网站?
php打包exe后无法访问网络共享_共享权限设置方法【教程】
如何在IIS中配置站点IP、端口及主机头?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
Linux后台任务运行方法_nohup与&使用技巧【技巧】
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
如何快速登录WAP自助建站平台?
如何在IIS中新建站点并配置端口与IP地址?
Laravel如何实现模型的全局作用域?(Global Scope示例)
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
如何用VPS主机快速搭建个人网站?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
香港服务器租用费用高吗?如何避免常见误区?
如何在云主机上快速搭建多站点网站?
Java垃圾回收器的方法和原理总结
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
如何快速搭建FTP站点实现文件共享?


me -n 's/\.LOG$/.log/'