【问题标题】:Insert delay between lines of bash在 bash 行之间插入延迟
【发布时间】:2017-10-25 10:41:33
【问题描述】:

我在 OSX 终端中运行了一个非常简单的重命名脚本。它看起来像这样:

mv -nv  /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate1.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate1A.tif

对于我必须重命名的所有文件,我通常有几百行这样的重命名代码。

但是我认为工作中的网络安全正在弄乱代码,因为它会随机提升文件名。我认为它在中断代码,代码太简单了我想不出它不起作用的另一个原因。

我想尝试在每行之间添加 1 秒的延迟,但是如何?我读过像 sleep 1s 这样的东西可能会起作用,但我必须在每一行之间添加它吗?如果是这样,那将是一件令人头疼的事情。如果是,还有其他方法吗?

更新:我工作有延迟,但仍然遇到与以前相同的问题。这是终端返回的内容:

mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_alternate1.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_alternate1A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_alternate2.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_alternate2A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_alternate3.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Remv -nvest/1247136_alternate3A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_alternate4.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Remv -nTest/1247136_alternate4A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_lifestyle.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Renmv -nv /Volume36_lifestyleA.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_standard.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1247136_standardA.tifç^C^C^C^C^C

它在重命名部分抛出了各种垃圾。它弄乱了文件名和目录名,我不知道为什么。

【问题讨论】:

  • 如果您能说出需要更改的规则是什么,那么有些工具会自动为您重命名文件......即所有字母都必须大写,并且必须删除所有下划线。跨度>
  • 我敢打赌,“顶起”条目的名称中有空格。您需要引用 mv /path/2/file "/path w spaces/2/file" 之类的内容。祝你好运。

标签: bash macos terminal osx-yosemite


【解决方案1】:

如果您打算从终端执行所有这些 mv 命令,您可以创建一个 bash 别名:

alias mvd='sleep 2s && mv'

就脚本而言,由于脚本不理解 bash 别名(至少很容易),因此您可以在脚本的开头构建一个类似的函数:

function mvd { sleep 2s && mv "$@"; }

您唯一需要做的就是使用新的mvd 命令而不是mv

提示:如果是别名,您也可以将别名命名为 mv(与命令同名)。

【讨论】:

    【解决方案2】:

    如果您已经有一个包含硬编码路径的脚本(例如,该脚本如下所示:

    mv -nv /path1 /path2
    mv -nv /path3 /path4
    ...
    

    那么可能最简单的做法是在脚本顶部定义一个函数,添加:

    mv() { command mv "$@"; sleep 1; }
    

    【讨论】:

    • 谢谢!这似乎确实有效,但不幸的是,延迟并没有阻止重命名被抬高。我已经在我的原始帖子中添加了示例,我可能不得不就此开始一个新主题,因为我现在不知道该怎么做。
    【解决方案3】:

    以下脚本只是读取您的命令文件并在每个命令后插入睡眠

    while read curr_line; do
    
        echo curr_line $curr_line
    
        return_msg=$( $curr_line  )   #  execute cmd 
    
        # may want to do error checking on value of error variable $? and return_msg
    
        sleep 1
    
    done < ./input_file_of_original_cmds.txt   #  read in that file
    

    【讨论】:

    • 这不是返回码,而是命令转储到标准输出的任何内容。返回码在 $? 中。
    猜你喜欢
    • 2015-06-15
    • 2020-08-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    相关资源
    最近更新 更多