Bash 如何在for循环中转义冒号和逗号等字符?

Bash 如何在for循环中转义冒号和逗号等字符?,bash,rsync,cp,Bash,Rsync,Cp,我有一个名为“blocked.txt”的文件,其中包含4000个文件的名称,如下所示: 1502146676.VdeI4b5c5cbM804631.vps47619.domain.local:2, 1502146676.VdeI4b5c5cdM808282.vps47619.domain.local:2, 1502146677.VdeI4b5c5d3M192892.vps47619.domain.local:2, 1502146677.VdeI4b5c5d7M213070.vps47619.do

我有一个名为“blocked.txt”的文件,其中包含4000个文件的名称,如下所示:

1502146676.VdeI4b5c5cbM804631.vps47619.domain.local:2,
1502146676.VdeI4b5c5cdM808282.vps47619.domain.local:2,
1502146677.VdeI4b5c5d3M192892.vps47619.domain.local:2,
1502146677.VdeI4b5c5d7M213070.vps47619.domain.local:2,
1502146677.VdeI4b5c5e5M796312.vps47619.domain.local:2,
1502146678.VdeI4b5c5efM412992.vps47619.domain.local:2,
1502146678.VdeI4b5c5f1M613275.vps47619.domain.local:2,
1502146679.VdeI4b5c5f8M11301.vps47619.domain.local:2,
1502146682.VdeI4b5c66dM115848.vps47619.domain.local:2,S
1502146682.VdeI4b5c676M608733.vps47619.domain.local:2,
1502146685.VdeI4b5c69aM1652.vps47619.domain.local:2,
....
 ....
我在shell上运行下面的命令将文件复制到/tmp/backup目录

for i in `cat blocked.txt`; do cp -f  "${i}" /tmp/backup/ ; done 
但这会给我错误“您想覆盖吗?是/否”,即使我在cp中使用了-f


知道命令中有什么错误吗?

您可能有别名

alias cp="cp -i"
或功能

cp () {
    command cp -i "$@"
}
这会干扰

要解决此问题,只需使用
命令cp
,而不是仅使用
cp

while read -r name; do
    command cp "$name" /tmp/backup
done <blocked.txt
while read -r name; do
    /bin/cp "$name" /tmp/backup
done <blocked.txt

我已经使用了您的代码,但无法复制(使用linux和bash)。我们多次尝试此操作时,文件已正确复制且没有错误消息