【问题标题】:Should Be Simply Bash Script - But I Can't Get It to Work Correctly应该是简单的 Bash 脚本 - 但我无法让它正常工作
【发布时间】:2021-12-17 07:50:26
【问题描述】:

我正在尝试在我的 Mac 上创建与日历事件相关联的自动化。就是每天运行一个bash脚本。

我正在尝试和失败的是让它识别 if else fi 过程。基本上,我要求它首先检查识别的文件夹中是否有任何文件。如果没有(文件夹中没有文件),我希望它退出脚本。如果文件夹中有文件,我想将它们移动到其他文件夹。

我已经尝试了 find 函数的多次迭代(我将在下面粘贴最新的)。所以,我从文件夹中的一些 m4a 文件开始。我运行下面的脚本,它成功地将文件移动到我希望它们移动到的文件夹中。我第二次运行脚本(现在文件夹是空的,因为我刚刚将所有文件移出)。第二次运行只是我测试脚本是否识别文件夹为空并退出脚本。但是,该文件夹是空的,并且我收到一条错误消息,显示该脚本试图再次运行移动 (mv) - 在我看来,它似乎忽略了“if”检查。

这是我所拥有的:

cd /Users/mikehaddon/Desktop/Network/BOPPAudioWork/M4AHoldingBin

if find /Users/mikehaddon/Desktop/Network/BOPPAudioWork/M4AHoldingBin -empty | read; then

    exit

else

    mv -f *.m4a /Users/mikehaddon/Desktop/BOPPAudio

fi

非常基本。在文件夹中查找。如果为空,则退出脚本。如果它不为空,请将文件夹的内容移动到其他位置。

拔掉我的头发。

【问题讨论】:

    标签: bash directory find move exit


    【解决方案1】:

    你可以像这样检查文件夹是否为空:

    if [ -z "$(ls -A /path/to/folder)" ]; then
      #
      # Folder is empty, exit script
      exit 0
    else
      #
      # Folder contains something
      # do your stuff and exit... 
      mv /path/to/folder/* /target/folder
      exit 0
    fi
    

    如果您只想根据扩展名检查和复制特定文件,您可以这样做:

    if ls /path/to/folder/*.m4a > /dev/null 2>&1; then
      #
      # m4a files founded, move and exit
      mv /path/to/folder/*.m4a /target/folder
      exit 0
    else
      #
      # No *.m4a files, exit
      exit 0
    fi
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2011-06-24
      • 1970-01-01
      相关资源
      最近更新 更多