UNIX:如何在不期望二元运算符的情况下移动文件夹内的所有文件

UNIX : How to move all file inside folder without getting binary operator expected

我有 bash unix 脚本可以将所有文件从一个文件夹移动到另一个文件夹。 但是,当源文件夹中的文件超过 1 个时,它总是给我预期的二进制操作。

我的代码是这样的

#Variable
NAS_MYTH=/cd/myth_extfile/shyn/
NAS_SHYN=/cd/shyn/MYTH/*

#Script
echo " Move file SHYN to NAS MYTH : $NAS_MYTH"

if [ -f $NAS_SHYN ]; then
 mv $NAS_SHYN $NAS_MYTH
 echo "Success:  moving files to $NAS_MYTH"
else
 echo "Success : No files need to be moved"
fi

我正在使用 if 方法检查那里是否有数据,所以它会显示成功错误 但是,当 MYTH 文件夹中只有一个数据时,我使用的这段代码很好,但是当它有多个数据时,我会得到这样的错误输出

Move file SHYN to NAS MYTH : /cd/myth_extfile/shyn/
./mv_shyn_files.sh: line 52: [: /cd/shyn/MYTH/FAQ - MYTH.pdf: binary operator expected
Sucess : No file need to be move

谁能帮帮我?谢谢

更新

都解决了,我现在正在使用这个代码

shopt -s nullglob
NAS_MYTH=/cd/myth_extfile/shyn/
NAS_SHYN=(/cd/shyn/MYTH/*)

   echo "Checking if there is a file, please wait"

if [ "${#NAS_SHYN[@]}" != 0 ]; then
  echo "There is ${#NAS_SHYN[@]} file"
  mv -f "${NAS_SHYN[@]}" "$NAS_MYTH"
  echo "Success : ${#NAS_SHYN[@]} file moved"
else
  echo "Success : There is no file need to be moved"
fi

感谢大家帮助我:D

NAS_SHYN=/cd/shyn/MYTH/* 将文字 * 分配给 NASH_SHYN。但是当你写 $NAS_SHYN 时不带引号然后 * 被扩展成一个文件列表,然后通过在空格处分割文件名来扩展成一个单词列表。在您的情况下,似乎只有一个文件,即 FAQ - MYTH.pdf。但是,该文件中有空格,因此 bash 将您的文件名拆分为多个单词导致错误。

相反,使用数组并引用变量。

shopt -s nullglob
NAS_SHYN=(/cd/shyn/MYTH/*)

if [ "${#NAS_SHYN[@]}" != 1 ]; then
  echo "expected one match but found ${#NAS_SHYN[@]}"
  exit 1
fi
echo "The only match is ${#NAS_SHYN[0]}"

if [ -f "${NAS_SHYN[0]}" ]; then
  …

顺便说一句,ALLCAPS 变量按照惯例是特殊变量或环境变量。为避免意外名称冲突,请改用小写变量。