mv:使用 grep 后缺少目标文件操作数

mv:使用 grep 后缺少目标文件操作数

起亚奥拉,

我有一个构建脚本,在其中执行一系列文件操作,如果操作成功,我会将内容打印到 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,否则这应该可以工作。

也可以看看

相关内容