Linux脚本- 将当前文件夹以及所有子文件夹下的所有.cpp文件,拷贝到指定文件路径下

需求:将当前文件夹以及所有子文件夹下的所有.cpp文件,拷贝到指定文件路径/home/majn/llvm_project/llvm_cpp_test_suite下

以下是一个用于实现该功能的 Bash 脚本。它会递归地查找当前文件夹和所有子文件夹下的.cpp文件,并将它们拷贝到/home/majn/llvm_project/llvm_cpp_test_suite这个目录下。

#!/bin/bash

# 目标文件夹路径
DEST_FOLDER="/home/majn/llvm_project/llvm_cpp_test_suite"

# 检查目标文件夹是否存在,如果不存在则创建
if [ ! -d "$DEST_FOLDER" ]; then
  mkdir -p "$DEST_FOLDER"
fi

# 使用find命令递归地查找所有.cpp文件,并使用cp命令将它们拷贝到目标文件夹
find . -type f -name "*.cpp" -exec cp --parents \{} $DEST_FOLDER \;

echo "All .cpp files have been copied to $DEST_FOLDER."

要运行这个脚本,请遵循下面的步骤:

  1. 将上面的代码保存到一个文件中,比如叫做copy_cpp_files.sh

  2. 打开终端,导航到保存该脚本的文件夹。

  3. 使用chmod命令给脚本添加执行权限:

    chmod +x copy_cpp_files.sh
    
  4. 执行脚本:

    ./copy_cpp_files.sh
    

这样,脚本会把当前文件夹以及所有子文件夹下的.cpp文件拷贝到/home/majn/llvm_project/llvm_cpp_test_suite目录下。

Note: 这个脚本使用了cp --parents命令,这意味着源文件的目录结构也会被复制到目标文件夹中。如果你不希望这样,你可以删除--parents选项。然而,如果有重名文件,这可能会导致问题。请谨慎操作,并在运行脚本之前做好备份。

【注1】:在 Bash 脚本中,-d 是一个单目运算符,用于检查指定的路径是否是一个目录。当你在条件表达式中使用 -d,如 [ -d "$DEST_FOLDER" ],这将会检查 $DEST_FOLDER 是否是一个存在的目录。

如果 $DEST_FOLDER 是一个目录,那么该条件表达式 [ -d "$DEST_FOLDER" ] 的返回值为真(0)。如果不是一个目录或该路径不存在,那么返回值为假(非 0 值)。

因此,在 [ ! -d "$DEST_FOLDER" ] 表达式中,! 符号用于逆转 -d 的结果。所以这个整体表达式会检查 $DEST_FOLDER 是否不是一个目录。如果 $DEST_FOLDER 不是一个目录或该路径不存在,这个表达式将返回真。这通常用于确定是否需要创建一个新的目录。

【注2】:这个命令使用 find 工具在当前目录(表示为.)和其所有子目录中递归地查找文件。找到的文件必须满足两个条件:

  1. 它们是文件(-type f)。
  2. 它们的文件名以 .cpp 结尾(-name "*.cpp")。

对于满足这些条件的每个文件,find 会执行 cp --parents \{} $DEST_FOLDER 命令。这个命令会将找到的文件复制到 $DEST_FOLDER 指定的目录。

下面是命令各部分的详细解释:

  • find .:从当前目录开始搜索。
  • -type f:仅查找文件(不包括目录、链接等)。
  • -name "*.cpp":只有文件名匹配这个模式的文件会被选中。这里,选中的文件是所有以 .cpp 结尾的文件。
  • -exec:对每个找到的文件执行后面跟着的命令。

接下来是 -exec 参数后面的命令:

  • cp --parents \{} $DEST_FOLDER:这是 cp 命令,用于复制文件。

    • --parents:这个选项会保留源文件的目录结构。例如,如果源文件在 subdir/myfile.cppcp --parents 会在 $DEST_FOLDER 中创建一个名为 subdir 的子目录(如果尚不存在),然后将 myfile.cpp 复制到那里。
    • \{}:这是一个占位符,代表 find 命令找到的每个文件。
    • $DEST_FOLDER:这是目标目录,所有找到的 .cpp 文件都会被复制到这里。
  • \;:标记 -exec 参数的结束。

综上所述,这个命令会找到当前目录和所有子目录下的 .cpp 文件,并保留它们的目录结构,复制到 $DEST_FOLDER 指定的目录中。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青衫客36

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值