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

编写Bash脚本遍历目录并按文件名上传.py文件的问题

Bash脚本实现遍历.py文件并按无扩展名文件名上传

方法一:结合find命令与basename提取文件名

适合递归遍历目录下所有.py文件,处理逻辑清晰:

#!/bin/bash
# 替换为你要遍历的目标目录
TARGET_DIR="./your_target_directory"

# 递归查找所有.py文件并逐行处理
find "$TARGET_DIR" -type f -name "*.py" | while read -r py_file; do
    # 提取不带路径和扩展名的纯文件名
    filename_no_ext=$(basename "$py_file" .py)
    # 替换为你的实际上传命令,示例:scp "$py_file" user@server:path/to/upload/$filename_no_ext
    your_upload_command "path/to/upload/$filename_no_ext"
done
  • basename "$py_file" .py:直接去掉文件的完整路径和.py扩展名,比如从zero/ein/ein.py得到ein
  • 用引号包裹变量,可避免文件名含空格、特殊字符时出现解析错误

方法二:用Bash参数扩展处理(无需外部命令)

通过Bash内置的参数扩展实现文件名提取,性能更优:

#!/bin/bash
# 开启递归glob匹配(**代表任意层级子目录)
shopt -s globstar

# 替换为你要遍历的目标目录
TARGET_DIR="./your_target_directory"

# 遍历所有.py文件
for py_file in "$TARGET_DIR"/**/*.py; do
    # 跳过不存在的文件(防止glob无匹配时的空变量)
    [[ -f "$py_file" ]] || continue
    # 第一步:去掉完整路径,得到带扩展名的文件名
    filename_with_ext="${py_file##*/}"
    # 第二步:去掉.py扩展名
    filename_no_ext="${filename_with_ext%.py}"
    # 执行上传命令
    your_upload_command "path/to/upload/$filename_no_ext"
done
  • ${py_file##*/}:删除变量开头最长的含/前缀,仅保留纯文件名
  • ${filename_with_ext%.py}:删除变量末尾最短的.py后缀,得到目标文件名

注意事项

  • 将your_upload_command替换为实际的上传指令(如scp、curl等)
  • 若无需递归遍历,可去掉shopt -s globstar,并把**/*.py改为*.py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:31:15