我必须制作一个脚本,该脚本将从“ 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. 

===============>>#1 票数:2

用我的评论做出答案...

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

第一个用于顶级目录(copypath),第二个用于任何子目录。

  ask by Manuel translate from so

===============>>#2 票数:1 已采纳

-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" {} + 

  ask by Manuel translate from so

本文未有回复,本站智能推荐: