在bash行之间插入延迟

时间:2017-05-24 22:16:49

标签: bash macos terminal osx-yosemite

我有一个非常简单的重命名脚本,我在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

它在重命名部分抛出各种垃圾。它弄乱了文件名和目录名,我无法弄清楚原因。

3 个答案:

答案 0 :(得分:0)

以下脚本只读入您的命令文件,并在每个命令后插入一个休眠

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

答案 1 :(得分:0)

如果您计划从终端执行所有mv命令,则可以创建bash别名:

alias mvd='sleep 2s && mv'

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

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

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

提示:如果是别名,您还可以命名别名mv(与命令名称相同)。

答案 2 :(得分:0)

如果您已经有一个具有硬编码路径的脚本(例如,脚本如下:

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

那么最简单的事情可能是通过添加以下内容在脚本顶部定义一个函数:

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