Linux Shell脚本查找文件并重命名

时间:2017-02-19 09:05:15

标签: linux bash shell

我的目标是在简单的shell脚本中重命名带有日期时间戳的文件名。文件名以“.dfr_resp”结尾,这就是为什么我通过查找以.dfr_resp结尾的文件创建变量,然后将文件重命名为带有日期扩展名的MyFileName。

以下是我的代码。

#!/bin/bash
date=`date  +%m%d%Y%H%M%S`
cd /app/Informatica/INFA961/server/infa_shared/SrcFiles
FileName=`ls *.dfr_resp`
mv $FileName MyFileName.date

我面临的错误是:

: No such file or directoryInformatica/INFA961/server/infa_shared/SrcFiles
ls: *.dfr_resp: No such file or directory
mv: cannot stat `\r': No such file or directory
: command not found
: command not found
: command not found

3 个答案:

答案 0 :(得分:1)

好吧,首先关闭目录

/app/Informatica/INFA961/server/infa_shared/SrcFiles

不存在。

这就是你看到的原因:

No such file or directoryInformatica/INFA961/server/infa_shared/SrcFiles 

尽管格式错误,但似乎你想要运行

FileName=`ls *.dfr_resp`

这意味着执行命令“ls * .dfr_resp”,并将结果文本输出分配给变量FileName。

(上面写得更好FileName=$(ls *.dfr_resp),但在任何情况下都不理想。问题是如果有名为“Alpha”,“Beta”和“My Stuff”的文件:{{1将成为“Alpha Beta My Stuff”。是否有文件“我的”和“东西”?)

现在您看到的错误是FileName

这意味着在我们仍然坐着的目录中没有匹配ls: *.dfr_resp: No such file or directory

这意味着*.dfr_resp将保留空字符串。

因此FileName实际上是mv $FileName MyFileName.date,这是一个不完整的命令。

我不太清楚为什么要留言

mv MyFileName.date

出现但由于某种原因,回收了回车,导致混乱。

无论如何,首先修复目录名称。

还在脚本中添加以下命令作为第一个命令:

mv: cannot stat `\r': No such file or directory

以便在发生错误之前,您的脚本将在第一次出错时退出。

还要考虑将脚本粘贴到

https://www.shellcheck.net/

让他们检查错误(这应该是内置的bash真的,在那个古老的仓鼠中有太多的历史和残骸......)

答案 1 :(得分:0)

与大卫同意90%,但我不明白的一件事是第一条错误消息没有提到目录名中的/ app /,而完整的目录路径直接在单词目录之后...是它你可以为/ app /设置一个unix别名代表退格吗?查看.profile和Informatica用户主目录的任何其他启动文件,以检查这一点。

这可能是一件小事(甚至是你在这里发布时的拼写错误)但我发现它的小东西通常可以解决一个特别棘手的问题

答案 2 :(得分:0)

我能够执行我的脚本。

Mark是对的,我在Windows上的编辑器中编写了脚本,我猜这是导致部分错误。在我重写了Putty中的代码后,我能够成功运行它。

set -o errexit
date=`date  +%m%d%Y%H%M%S`
cd /app/Informatica/INFA961/server/infa_shared/SrcFiles/chase_paymentech/
FileName=$(ls *.dfr_resp)
mv $FileName File.$date

谢谢大家,感谢您的见解。

相关问题