如何编写Bash脚本实现文件查找与移动操作?
用Bash脚本实现文件查找、压缩与移动操作
先纠正你命令里的几个问题:
- 不要用
$PATH作为搜索路径:$PATH是系统环境变量,用来存储命令的查找路径,自定义路径请用其他变量名(比如SEARCH_PATH),避免覆盖系统变量导致命令无法执行。 - 拼写错误:第二个命令里的
-exem是笔误,正确参数是-exec。 - 两次扫描目录的冗余:分开执行两次
find会重复扫描目录,效率较低,推荐合并处理或优化逻辑。
基础版脚本(分步执行)
#!/bin/bash # 定义搜索目录和目标目录,替换为你实际的路径 SEARCH_PATH="/your/source/directory" DEST_PATH="/your/destination/directory" # 确保目标目录存在,不存在则创建 mkdir -p "$DEST_PATH" # 查找1天内修改的文件并压缩 find "$SEARCH_PATH" -type f -newermt "1 day ago" -exec gzip {} \; # 查找刚生成的压缩文件并移动到目标目录 find "$SEARCH_PATH" -type f -name "*.gz" -newermt "1 day ago" -exec mv {} "$DEST_PATH" \;
优化版脚本(单次扫描,批量处理)
这个版本只扫描一次目录,压缩后直接移动,效率更高:
#!/bin/bash SEARCH_PATH="/your/source/directory" DEST_PATH="/your/destination/directory" mkdir -p "$DEST_PATH" # 一次查找完成压缩+移动操作 find "$SEARCH_PATH" -type f -newermt "1 day ago" -exec sh -c ' for file do # 压缩文件 gzip "$file" # 移动压缩后的.gz文件到目标目录 mv "$file.gz" "$0" done ' "$DEST_PATH" {} +
使用说明
- 修改
SEARCH_PATH和DEST_PATH为你实际需要的路径,路径包含空格时也能正常处理(因为用双引号包裹了变量)。 - 给脚本添加执行权限:
chmod +x file_process.sh。 - 测试时可以先把
gzip和mv换成echo gzip、echo mv,确认要处理的文件是否正确,避免误操作。
内容的提问来源于stack exchange,提问作者masoud atyabi
相关产品推荐
相关产品推荐

