Bash-读取文本文件,删除连字符,然后复制文件

Bash-读取文本文件,删除连字符,然后复制文件,bash,cp,hyphen,Bash,Cp,Hyphen,我有一个web服务器,它为存储在web目录中的JPG生成GUID作为文件名。GUID的一部分包含连字符,例如: 34bc9ead-f8f0-467d-8605-df77f392da07.jpg 然后,它生成一个存储在服务器上的文本文件,其中包含列表中的所有JPG,如下所示 www.awebsite.com/img/34bc9ead-f8f0-467d-8605-df77f392da07.jpg 在raspberry pi客户端上,我运行wget来获取这个txt文件和图像。然后我需要将这些图像复制

我有一个web服务器,它为存储在web目录中的JPG生成GUID作为文件名。GUID的一部分包含连字符,例如:

34bc9ead-f8f0-467d-8605-df77f392da07.jpg

然后,它生成一个存储在服务器上的文本文件,其中包含列表中的所有JPG,如下所示

www.awebsite.com/img/34bc9ead-f8f0-467d-8605-df77f392da07.jpg

在raspberry pi客户端上,我运行wget来获取这个txt文件和图像。然后我需要将这些图像复制到另一个驱动器

如果我运行bash读取文本文件,去掉完整的URL,使其仅为文件名,然后使用CP复制文件,它会产生一个奇怪的错误,表示无法复制文件“34bc9ead-f8f0-467d-8605-df77f392da07.jpg/r”。注意,文件结尾似乎附加了“/r”

说到编码,我只是个新手,所以如果我的方法没有得到优化,或者我做的完全错误,我深表歉意

while read -r p; do
[[ "$p" == */* ]] || p="./$p"
b="${p##*/}"
cp $b /newdirectory/$b
done < wget_filelist.txt
sleep 5
done;
读取时-rp;做
[[“$p”==*/*]|p=“../$p”
b=“${p##*/}”
cp$b/newdirectory/$b
完成
只是补充一点,我不能使用wget将文件下载到目标目录。我使用wget将它放在一个目录中,然后将图像复制到ram磁盘以读取另一个作业

我曾想过从文件名中删除连字符,我可以成功地做到这一点,但这会让我在其他地方为我试图实现的目标感到头疼。似乎读取一个文本文件并将其传递到cp会导致出现这个奇怪的“/r”


非常感谢您提供的任何帮助

您的文件
wget_filelist.txt
具有
DOS
style
CRLF(\r)
结尾,请通过运行将其删除

dos2unix wget_filelist.txt

然后运行原始的
bash
脚本。

也可以在脚本中删除回车:
sed的/\r$/'wget_文件|读取时。。。;做完成
OP正在检查$p是否包含斜杠。如果不是,就在路径前面加“/”。@glennjackman:有时候最简单的事情会让我们想到各种复杂的情况。