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 变量按照惯例是特殊变量或环境变量。为避免意外名称冲突,请改用小写变量。
我有 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 变量按照惯例是特殊变量或环境变量。为避免意外名称冲突,请改用小写变量。