2017-05-25 155 views
0

我有一个非常简单的bash脚本,我在OSX终端中运行。它旨在使用特定文件路径重命名文件。它过去几个月前工作正常,但最近发生了各种各样的疯狂事情,我不知道为什么。Bash重命名脚本的问题

下面是代码:

mv() { command mv "[email protected]"; sleep 1; } 
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate1.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate1A.tif 
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate2.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate2A.tif 
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate3.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate3A.tif 
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate4.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate4A.tif 
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_lifestyle.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_lifestyleA.tif 
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_standard.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_standardA.tif 

我已经有和没有第一线运行。我添加了睡眠延迟,因为我怀疑是什么导致问题是一个过分积极的IT部门干扰终端,可能仍然是这种情况,但是无论哪种方式,脚本都不起作用。

这是当我运行它什么终端返回:

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

正如你可以看到它使文件重命名的真正的混乱,以及文件的路径,甚至不发生变化。我简直就是在文件名末尾和文件扩展名之间加上字母A.

没有人在这里看到任何可能会造成这种情况发生?我们的IT部门最近开始使用称为WebSense的内容网关来监控公司活动,它是否有可能导致问题?

+2

有危险,你的脚本已经在Windows机器附近,或以其他方式污染回车(^ M)字符?我不确定这会解释你容易看到的内容,但只是想知道。你如何运行它? 'sh script.sh'?你尝试过'bash -x script.sh'(或'sh -x script.sh')吗? –

+0

是的,它绝对靠近Windows机器。必须在Windows中搜索文件路径,因为我们尚未设置Windows服务器与我们的Mac之间的适当通信。这些文件路径放入Excel文档中,然后在TextWrangler中进行格式化,以便在代码中使用。但是,这很可能导致一团糟。我也应该尝试在shell中运行它,而不是直接在Terminal中运行它。 –

回答

1

你还没有告诉我们(还)你如何调用你的脚本

如果你的脚本仍然认为是一个可执行,它不会产生输出你的状态 - 这将不只是呼应脚本,另外尾部字符这一规定。

  • 如果你调用脚本直接

    • 请问你的脚本有shebang line,如下面的脚本?
    • 它是否被标记为可执行,与chmod +x <file>
  • 否则:你传递了哪些可执行文件?

  • 请问您的脚本包含意外的字符,这与前缀^(如^M的CR(\r)字符。),或者如果您运行LC_ALL=C cat -et <file>M-显示,如Jonathan Leffler建议?

  • 乔纳森还建议:你也许调用你的脚本作为一个整体sh -nv <file>bash -nv <file>,这至少解释为什么源代码打印(-v不执行脚本(-n ),尽管它本身不解释意外的尾随字符。

在此期间,这里是你的脚本中的DRY精神改写如下:

#!/bin/bash 

pathPrefix='/Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122' 

files=(
    "${pathPrefix}_alternate1.tif" 
    "${pathPrefix}_alternate2.tif" 
    "${pathPrefix}_alternate3.tif" 
    "${pathPrefix}_alternate4.tif" 
    "${pathPrefix}_lifestyle.tif" 
    "${pathPrefix}_standard.tif" 
) 

for file in "${files[@]}"; do 
    mv -nv "$file" "${file%.tif}a.tif" 
done 
+0

请注意,在macOS上,'mv'命令有'-v'选项,它被描述为:_'-v'因为'mv'是详细的,在移动后显示文件._ –

+0

@JonathanLeffler:是的,但会导致以下类型的输出,与源代码截然不同:'foo - > bar'。 – mklement0

+0

好的;我想知道他是否在使用'sh -nv script.sh'? –