You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本迁移目录后find与copy功能失效求助

问题分析与解决

核心问题原因

你的脚本里的find命令没指定搜索起始路径,默认会以脚本执行时的当前工作目录作为搜索起点。当把脚本复制到其他目录执行时,当前工作目录变了,find自然找不到原位置的文件——哪怕你在正确目录单独执行find能找到结果。

修复后的脚本

#!/bin/bash
# 检查参数数量
if [ "$#" -ne 2 ]; then
    echo "ARGUMENTS INCORRECT"
    echo "USAGE: bash copyScript.sh <list_of_filenames> <files_destination_address>"
    exit 1
fi

# 获取脚本所在的绝对路径(无论在哪执行,都从这里开始搜索)
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
FILE_LIST="$1"
DEST_DIR="$2"

# 目标目录不存在则自动创建
if [ ! -d "$DEST_DIR" ]; then
    mkdir -p "$DEST_DIR"
fi

# 读取文件列表并处理每一行
while IFS= read -r filename || [ -n "$filename" ]; do
    # 跳过空行
    [ -z "$filename" ] && continue
    # 从脚本所在目录搜索文件并复制
    find "$SCRIPT_DIR" -iname "$filename" -print -exec cp {} "$DEST_DIR" \;
done < "$FILE_LIST"

关键修改说明

  • 固定搜索路径:用SCRIPT_DIR获取脚本所在的绝对路径,让find从这个固定位置开始搜索,彻底摆脱执行目录的影响。
  • 兼容特殊文件名:IFS= read -r确保能正确读取带空格的文件名,|| [ -n "$filename" ]避免遗漏文件最后一行(如果该行没有换行符)。
  • 容错处理:自动创建不存在的目标目录,跳过文件列表里的空行,减少执行报错。

额外实用提示

  • 可以给cp加-v参数(cp -v {} "$DEST_DIR"),复制时会打印日志,方便排查哪些文件被处理了。
  • 如果你本来就想从执行脚本时的当前目录搜索,那执行前先切换到文件所在目录,或者给脚本加第三个参数用来指定搜索路径。

内容的提问来源于stack exchange,提问作者WKGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:27:10