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 指定的目录中。

你可能感兴趣的:(Linux,linux)