为什么子目录中的文件没有被复制?
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
展开 *
并将生成的文件列表提供给 cp
。 cp
然后只会看到像 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.*
第一个用于顶级目录(复制路径),下一个用于任何子目录。
我必须制作一个脚本,它将所有文件从以 "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
.
在执行 cp
之前 bash
展开 *
并将生成的文件列表提供给 cp
。 cp
然后只会看到像 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.*
第一个用于顶级目录(复制路径),下一个用于任何子目录。