起亚奥拉,
我有一个构建脚本,在其中执行一系列文件操作,如果操作成功,我会将内容打印到 stdout 作为构建报告的一部分。但是我经常收到错误“mv:缺少目标文件操作数”。
if mv $(ls *.md | grep -v _index.md) markdown; then
echo " Put Markdown files back in 'markdown'"
fi
我一直在读,通常是人们错过了命令的目标部分,但在这种情况下,我没有思考我有。
任何意见,将不胜感激!
答案1
错误可能是因为$(ls *.md | grep -v _index.md)
计算结果为空字符串(即没有.md
不匹配的文件_index.md
),所以你的命令变成
mv markdown
一般来说,您应该避免使用如下结构,$(ls *.md | grep -v _index.md)
原因如下:
Bash 有几个很好的“通配符”特性,可以让你避免这样的问题:
#!/bin/bash
shopt -s nullglob extglob
mdfiles=( !(_index).md )
if (( ${#mdfiles[@]} > 0 )); then
if mv -t markdown/ -- "${mdfiles[@]}"; then
echo " Put Markdown files back in 'markdown'"
fi
else
echo " No Markdown files to move"
fi
除非文件数量.md
大到足以溢出 shell 的ARG_MAX
,否则这应该可以工作。
也可以看看