我有一个非常简单的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的内容网关监控公司活动,是否可能导致问题?
答案 0 :(得分:1)
你还没有告诉我们你如何调用你的脚本。
如果您的脚本仍然被识别为可执行文件,则它不会产生您声明的输出 - 它不会只是回显您的脚本,尽管有其他尾随字符。
如果您直接调用 脚本:
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