为什么子目录中的文件没有被复制?

Why does the file in a subdirectory not get copied?

我必须制作一个脚本,它将所有文件从以 "db." 开头的特定位置复制到另一个位置。我的脚本适用于直接位于目录中的所有文件,但它不会复制子目录中的任何文件。我使用了参数-r,它应该递归地复制所有内容吗?为什么它不工作,我怎样才能让它工作?

我的脚本:

#! /bin/bash

#Script zum kopieren aller Dateien welche mit "db." beginnen.

#User input
echo -n 'Enter path to copy from: '
read copypath

echo -n 'Enter path to save to: '
read savepath

cp -r $copypath/db.* $savepath

echo 'Done.

-r 在这里不起作用,因为您没有向 cp.

提供任何来源 directories

在执行 cp 之前 bash 展开 * 并将生成的文件列表提供给 cpcp 然后只会看到像 cp -r 1stFile 2ndFile 3rdFile ... targetDirectory 这样的东西——因此 -r 没有效果。

正如评论中指出的,您必须使用 bash 的 globstar 功能 **find。此外,您应该养成引用变量的习惯。

# requires bash 4.0 or higher (from the year 2009, but OS X has a really outdated version)
shopt -s globstar
cp "$copypath"/**/db.* "$savepath"

find "$copypath" -type f -name 'db.*' -exec cp -t "$savepath" {} +

根据我的评论做出回答...

尝试 $copypath/db.* 然后 $copypath/**/db.*

第一个用于顶级目录(复制路径),下一个用于任何子目录。