bash - 如果文件名则移动文件
问题描述
如果文件名然后移动文件,我使用 if 命令
这就是我到目前为止所拥有的
filename=$*test*
if [ -f "filename" ]
then
mv filename archive/filename
else
echo "no filename exists"
fi
当我运行脚本时,我得到“不存在文件名”
如何使用通配符作为变量?
解决方案
您的脚本有几个问题。
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/会发现很多语法错误。
推荐阅读
- node.js - 将 swagger 实现与控制器代码分开
- javascript - 如何在webgl的模型视图矩阵中设置旋转轴
- smartsheet-api - oAuth 如何与用户帐户相关联
- linux - Dockerfile 不支持 Unix 列表吗?
- apache - 网站重定向不正确,Google 索引 IP 地址而不是域,htaccess 编码
- r - 将重复的行保存到一个 txt 文件
- xcode - 如何将辅助文件添加到我的 macOS .app 存档并仍然通过 Apple 的公证?
- tensorflow-federated - 在 tensorflow 联合中更改模型但不起作用
- azure-iot-edge - 运行 tpm2_takeowership 后在 Yocto 上使用带有 IoT Edge 的 TPM 时出错
- mysql - 我可以更改此 SQL 查询输出的布局吗?