Bash重命名脚本的问题

时间:2017-05-25 21:57:24

标签: bash macos terminal rename

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

以下是代码:

mv() { command mv "$@"; 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的内容网关监控公司活动,是否可能导致问题?

1 个答案:

答案 0 :(得分:1)

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

如果您的脚本仍然被识别为可执行文件,则它不会产生您声明的输出 - 它不会只是回显您的脚本,尽管有其他尾随字符。

  • 如果您直接调用 脚本:

    • 您的脚本是否有shebang line,如下面的脚本?
    • 是否已使用chmod +x <file>标记为可执行文件
  • 否则:你传递给它的是什么可执行文件?

  • 您的脚本是否包含带有前缀^的意外字符(例如^M表示CR(\r)字符。)或M-如果您运行LC_ALL=C cat -et <file>,如Jonathan Leffler建议的那样?

  • 正如Jonathan进一步建议的那样:您是否可以使用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