【问题标题】:Need assistance for creating a simple bash script需要帮助来创建简单的 bash 脚本
【发布时间】:2013-08-26 19:12:47
【问题描述】:

我创建了这个 bash 文件,并在其上放置了我经常运行的用于从我的数码相机同步文件的命令。关键是它什么都没有!我错过了什么?
谢谢!
代码:

#!/bin/bash
#temporal
mkdir /tmp/canon

#copy files from camera
rsync -r /run/user/mango/gvfs/g*/DCIM /tmp/canon
cd /tmp/canon

#get files from subdirs
find ./ -name '*.JPG' -exec mv '{}' ./ \;

#remove dirs
ls -l | awk -F'[0-9][0-9]:[0-9][0-9]' '/^d/{print $NF}'| xargs -i rm -rf '{}' \;

#recreate folder structure with year|month pattern
jhead -n%Y/%m/%f *.JPG

#Sync with external HD
rsync -r --ignore-existing . /media/mango/WD/FOTOS/

【问题讨论】:

  • 你有什么错误吗?
  • 尝试将-v 添加到 rsync 中,看看它是否有作用。之后检查其他命令。还要确保您的文件名以.JPG 结尾,而不是.jpg。您可以使用-iname 忽略大小写。
  • 您需要使其可执行吗?即“chmod u+x script.sh”
  • 不解析 ls 输出。改用这个for curFile in *; do [[ -d "$curFile" ]] && [[ curFile =~ ^[0-9][0-9]:[0-9][0-9]$ ]] && rm -rf "$curFile"; done
  • 感谢您提供的所有提示,让它变得冗长只是向我展示了错误。谢谢!

标签: linux bash unix terminal sh


【解决方案1】:

如果它甚至不执行 mkdir,那么听起来你想要的脚本版本很可能不是正在运行的版本。尝试使用限定路径,例如./myscript 或绝对路径,例如/home/joe/bin/myscript。命令 type myscript 会告诉你 shell 从哪里运行它。

另外,在脚本顶部添加set -x 或使用bash -x myscript 后尝试运行脚本;这将在执行时显示每一行。

如果这仍然没有帮助,可能有 bash 启动代码,例如 .bashrc 中的阻碍。这很难诊断,尽管可以使用相同的 set -x,但要非常小心,除非第二个用户可以登录并编辑此用户的启动脚本,因为启动脚本中的错误可能会导致无法登录系统。

【讨论】:

    【解决方案2】:

    试试这个

    chmod +x yourscriptname
    
     ./yourscriptname
    

    请确保您正在运行您创建的相同脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 2012-12-09
      • 1970-01-01
      相关资源
      最近更新 更多