Shell脚本执行find命令报No such file or directory错误的解决办法
问题原因
- 核心错误是自定义变量占用了系统内置环境变量
PATH:PATH是Linux系统预设的环境变量,存储了所有可执行命令的搜索路径,将用户输入的路径赋值给PATH后,系统的命令搜索路径被覆盖为输入的/var/log,无法找到存放在系统默认路径下的find命令,因此抛出“不存在该文件或目录”的错误。 - 次要错误是命令替换的引号使用不当:
$("find $PATH -type f -size +1M")中给find命令额外套了双引号,会将整段字符串识别为单个可执行文件名,就算PATH变量正常也会执行失败。
修复方案
- 修改自定义变量名,替换为非系统保留的名称(例如
TARGET_PATH、SCAN_PATH),避免覆盖系统环境变量。 - 移除命令替换中
find外侧的多余双引号,不需要用引号包裹整个find命令。 - 可选优化:直接执行
find命令输出结果即可,不需要额外套echo和命令替换;给变量加上双引号,兼容路径中包含空格的场景。
修复后完整代码
#!/bin/bash DISK_USAGE=$(df -h /dev/xvda1 | awk '{gsub("%","",$5);print $5}' | tail -1) THRESHOLD=80 if [ $DISK_USAGE -ge $THRESHOLD ] then read -p "Enter the path for log files: " TARGET_PATH echo "Below is the list of large log files which are taking space:" find "$TARGET_PATH" -type f -size +1M fi
内容的提问来源于stack exchange,提问作者Ayush Kapil
相关产品推荐
相关产品推荐

