我正在尝试使用bash脚本将一个文件复制到多个目标。我需要循环遍历文本文件来读取目标,然后将文件复制到目标。
我试过了:
while read -r tpath
do
cp -p test.file "$tpath"
done < destination.txt
它会将文件复制到文件中的所有目标,但是我收到以下错误...
cp: cannot create regular file `': No such file or directory
有人可以告诉我我做错了什么或建议更好的方法吗?
答案 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
为空,则循环将静默跳转到下一次迭代而不执行正文的其余部分。