首页 > 解决方案 > 如果文件名则移动文件

问题描述

如果文件名然后移动文件,我使用 if 命令

这就是我到目前为止所拥有的

filename=$*test*
if [ -f "filename" ]
then
  mv filename archive/filename
else
  echo "no filename exists"
fi

当我运行脚本时,我得到“不存在文件名”

如何使用通配符作为变量?

标签: bashif-statementfilenames

解决方案


您的脚本有几个问题。

filename=$*test*

$*test*不是有效的 bash 语法。$表示一个变量。

我正在寻找测试作为文件名一部分的通配符

如果是这种情况,您需要删除前导$. 或者可能你的意思是*${test}*.

mv filename archive/filename

这将移动一个名为“filename”的文件,这可能不是您想要的。你可能想要:

mv "$filename" archive/

如果不重命名文件,则不需要在目标中指定名称。

如果您更改此行:

echo "no filename exists"

至:

echo "no $filename exists"

包括美元符号,您将确切地看到脚本试图查找的文件。

一些附加说明:

  • 包括set -x在脚本的开头。这将向您显示每个扩展的命令,以便您查看实际发生的情况。
  • 看看https://www.shellcheck.net/会发现很多语法错误。

推荐阅读