Bash - 读取文本文件,删除连字符,然后复制文件
Bash - Read text file, remove hyphens and then copy file
我有一个网络服务器,它生成 GUID 作为存储在网络目录中的 jpg 的文件名。 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;
补充一点,我无法使用wget 将文件下载到目标目录。我用 wget 把它放在一个目录中,然后将图像复制到 ram-disk 以供另一项工作读取。
我考虑过从文件名中删除连字符,我可以成功地做到这一点,但会让我在其他地方因为我试图实现的目标而头疼。似乎只是读取一个文本文件并将其传递给 cp 导致出现这个奇怪的“/r”。
非常感谢您的帮助
您的文件 wget_filelist.txt
有 DOS
风格的 CRLF(\r)
结尾,通过 运行ning
删除它
dos2unix wget_filelist.txt
和 运行 您的原始 bash
脚本。
我有一个网络服务器,它生成 GUID 作为存储在网络目录中的 jpg 的文件名。 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;
补充一点,我无法使用wget 将文件下载到目标目录。我用 wget 把它放在一个目录中,然后将图像复制到 ram-disk 以供另一项工作读取。
我考虑过从文件名中删除连字符,我可以成功地做到这一点,但会让我在其他地方因为我试图实现的目标而头疼。似乎只是读取一个文本文件并将其传递给 cp 导致出现这个奇怪的“/r”。
非常感谢您的帮助
您的文件 wget_filelist.txt
有 DOS
风格的 CRLF(\r)
结尾,通过 运行ning
dos2unix wget_filelist.txt
和 运行 您的原始 bash
脚本。