我创建了将文件.png
从一个目录复制到另一个目录的脚本。脚本如下:
i="`cat /usr/local/app1/default.conf | grep -i values | sed -e 's/\values=//g' -e 's/,/ /g'`"
for data in $i
do
cp -rvp /usr/local/dir1/$data.png /home/user1/dir1
done
当我运行上面的脚本时,它会将文件从dir1
复制到/home/user/dir1
,但最后给出错误,例如:
cp: cannot stat ‘/usr/local/dir1/wasw\r.png’: No such file or directory
内容在default.conf
:
values= wads sead seda okaw wasw
该命令cp
搜索这些值“wads”、“sead”等,但最后我收到上述错误。
答案1
如果您想保留与当前相同的代码,我建议使用sed
更多的代码:
i="`sed -n 's/'$'\r''//;s/,/ /g;s/values=//gp' /usr/local/app1/default.conf`"
for data in $i; do
cp -rvp /usr/local/dir1/$data.png /home/user1/dir1
done
怎么运行的 :
- 该
-n
标志sed
告诉它不要自动打印行 - 该
s/$'\r'//
语句删除了\r
可能导致您出现问题的字符 - 仅当进行替换时,
p
在语句末尾添加的内容才会打印缓冲区(仅当行中存在时)s/values=//gp
values=
答案2
实际上我没有得到你的用例,但我所理解的是你想.png
从一个目录中查找文件并将这些文件复制到另一个目录。如果我对你的用例的理解是正确的,那么下面的命令会有所帮助,
find /home/your/source/path/ -name \*.png -exec cp {} /home/your/destination/path/ \;
答案3
您可能在 Windows 计算机上编辑了 default.conf 文件并将其复制过来。该行末尾的换行符之前似乎有一个额外的字符。尝试od -c default.conf
。它可能会给你类似的东西:
0000000 v a l u e s = w a d s s e a
0000020 d s e d a o k a w w a s w
0000040 022 \n
0000042
编辑文件以删除022
字符(即\r
),然后重试。