fd查找文件并拷贝
根据您的需求,您希望递归搜索 cmake_out
目录下任意路径中所有以 vela
开头的 .bin
文件,并将它们拷贝到当前目录下的 nuttx
目录。使用 fd
命令可以这样实现:
mkdir -p nuttx && fd -t f -e bin '^vela' ./cmake_out -x cp -v {} ./nuttx
命令详解:
-
创建目标目录:
mkdir -p nuttx
-
搜索并拷贝文件:
fd -t f -e bin '^vela' ./cmake_out -x cp -v {} ./nuttx
-t f
:只搜索文件(排除目录)-e bin
:只匹配扩展名为.bin
的文件'^vela'
:使用正则表达式匹配以vela
开头的文件名./cmake_out
:搜索起始目录-x cp -v {} ./nuttx
:对每个匹配文件执行拷贝-v
:显示拷贝详情(可选,但推荐用于确认操作){}
:自动替换为找到的文件路径
根据您的目录结构优化:
从您的 ll
输出可以看出,文件大多在二级目录(如 p62_ap/
、p62_audio/
等)中。如果不需要递归搜索所有子目录,可以限制搜索深度:
# 只搜索二级目录(推荐)
fd -t f -e bin '^vela' -d 2 ./cmake_out -x cp -v {} ./nuttx
-d 2
:限制搜索深度为 2 级目录(即cmake_out/一级目录/文件
)
预期匹配的文件:
根据您的 ll
输出,这个命令将匹配:
cmake_out/p62_ap/vela_ap.bin
cmake_out/p62_audio/vela_audio.bin
cmake_out/p62_audio/vela_audio_image.bin
cmake_out/p62_bootloader2/vela_bl2.bin
cmake_out/p62_cp/vela_cp.bin
cmake_out/p62_cp/vela_cp_image.bin
cmake_out/p62_ota/vela_ota.bin
cmake_out/p62_sensor/vela_sensor.bin
注意事项:
- 文件名冲突:如果不同目录有同名文件(如多个
vela_audio.bin
),后拷贝的会覆盖前面的 - 大小写敏感:默认大小写不敏感,如需严格匹配小写
vela
,添加-s
参数:fd -s -t f -e bin '^vela' ./cmake_out -x cp {} ./nuttx
- 预览结果:先运行不带
-x
的部分确认匹配的文件:fd -t f -e bin '^vela' ./cmake_out
完整命令(推荐带确认):
# 1. 预览匹配的文件
echo "将拷贝以下文件:" && fd -t f -e bin '^vela' -d 2 ./cmake_out# 2. 实际执行拷贝
mkdir -p nuttx && fd -t f -e bin '^vela' -d 2 ./cmake_out -x cp -v {} ./nuttx
这个命令会:
- 精确匹配以
vela
开头的.bin
文件 - 限制在二级目录内搜索(根据您的目录结构优化)
- 显示拷贝详情(
-v
参数) - 自动创建目标目录(
mkdir -p
)