【问题标题】:Shell script - Can't do things after compress folderShell脚本 - 压缩文件夹后无法执行操作
【发布时间】:2015-08-03 12:28:28
【问题描述】:

当我运行 zip 命令时尝试做某事时,它不会工作。

这是我现在的脚本:

#!/bin/bash 
TIME=BACKUPMC-`date +%d-%m-%Y-%H:%M`.zip
zip -r $TIME /home/daixhosting/d1

效果很好。但是当我尝试做这样的事情时:

#!/bin/bash 
TIME=BACKUPMC-`date +%d-%m-%Y-%H:%M`.zip
zip -r $TIME /home/daixhosting/d1
echo "Done"

它不会工作..输出是这样的:

zip warning: name not matched: /home/daixhosting/d1

). -i /home/daixhosting/d1(try: zip -r BACKUPMC-03-08-2015-14:26.zip
done

即使我将目标文件夹设为变量,它也会给我同样的错误。

原因是什么?

谢谢

【问题讨论】:

  • 您的脚本可能有 DOS 行尾(这解释了看起来混乱的错误消息),并且脚本的最后一行仅在文件末尾终止(这解释了为什么第一个脚本有效但第二个脚本没有)。
  • 请参阅bash tag wiki 步骤 1 了解有关 DOS 行尾、如何检测它们以及如何删除它们的更多信息。
  • @thatotherguy 我不太明白如何删除 ^M...
  • @CasperRasmussen 您的意思是您不理解“如果找到它们,请使用dos2unix(又名fromdos)或tr -d '\r' 删除它们”的建议?
  • 如果 Windows 参与了创建或复制到 ubuntu,那么您需要在传输文件后使用dos2unix myscript。祝你好运。

标签: bash shell compression ubuntu-14.04


【解决方案1】:

您是否从某个地方将某些内容复制到您的脚本中?要么搜索

\r\n

在您的脚本中或在目标操作系统上创建的新文件中键入完全相同的内容。

【讨论】:

    【解决方案2】:

    在我的最后尝试,我得到了警告

    zip warning: name not matched:
    

    仅当我尝试 ZIP 的目录路径错误(不正确)时,否则脚本对我来说非常好。

    【讨论】:

    • 当我在 zip 命令之后没有任何东西时它正在工作。但是当我添加回声或者其他东西时,它给了我。
    【解决方案3】:

    试试这个

    TIME="$BACKUPMC""$(date +'%d-%m-%Y-%H:%M')"".zip"
    zip --recurse-paths --quiet "$TIME" "/home/daixhosting/d1"
    echo "DONE"
    

    【讨论】:

    • @CasperRasmussen BACKUPMP 不是变量吗?如果不是,则将第一行代码更改为TIME="BACKUPMC""$(date +'%Y-%m-%d_%H-%M-%S')"".zip",然后重试。
    最近更新 更多