备份脚本按扩展名复制文件

备份脚本按扩展名复制文件

我创建了将文件.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=//gpvalues=

答案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),然后重试。

相关内容