如何使用Bash将一个文件复制到多个目标

时间:2017-02-04 16:34:01

标签: bash

我正在尝试使用bash脚本将一个文件复制到多个目标。我需要循环遍历文本文件来读取目标,然后将文件复制到目标。

我试过了:

while read -r tpath
do
  cp -p test.file "$tpath"
done < destination.txt

它会将文件复制到文件中的所有目标,但是我收到以下错误...

cp: cannot create regular file `': No such file or directory

有人可以告诉我我做错了什么或建议更好的方法吗?

1 个答案:

答案 0 :(得分:2)

试试这个:

while IFS= read -r tpath
do
  [[ "$tpath" ]] || continue # Ignore empty lines
  if
    [[ -d "$tpath" ]]
  then
    cp -p test.file "$tpath"
  else
    echo "Invalid target directory: $tpath"
  fi
done < destination.txt

这将防止考虑空行或不存在的目录。

另外,如果变量包含非空值,则[[ "$tpath" ]]返回0(在shell语义中为“true”),否则返回非零值。它与[[ -n "$tpath" ]]的作用相同。 continue关键字导致循环跳转到下一次迭代,绕过循环的其余部分。 ||逻辑运算符是(惰性)OR逻辑运算符:仅当左侧的语句为false时,它才会在右侧执行语句。该行的结果是,如果tpath为空,则循环将静默跳转到下一次迭代而不执行正文的其余部分。