【问题标题】:Bash - Read text file, remove hyphens and then copy fileBash - 读取文本文件,删除连字符,然后复制文件
【发布时间】:2017-01-23 15:15:36
【问题描述】:

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

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

然后它会生成一个存储在服务器上的文本文件,其中包含列表中的所有这些 jpg,看起来像这样

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

在树莓派客户端上,我运行 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”。

非常感谢您的任何帮助

【问题讨论】:

    标签: bash cp hyphen


    【解决方案1】:

    您的文件 wget_filelist.txtDOS 样式 CRLF(\r) 结尾,运行将其删除

    dos2unix wget_filelist.txt
    

    并运行您原来的 bash 脚本。

    【讨论】:

    • 脚本中的回车也可以去掉:sed 's/\r$//' wget_file | while read ...; do ...; done
    • OP 正在检查 $p 是否包含斜杠。如果不是,则在路径前添加“./”。
    • @glennjackman:有时最简单的事情会让我们想到各种复杂的情况。
    猜你喜欢
    • 2014-10-28
    • 2019-05-17
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多