从命令行参数使用 bash 脚本复制多个文件?

Copy multiple files with bash script from command line arguments?

我想创建一个脚本,允许我从命令行输入多个文件名,并让脚本将这些文件复制到另一个目录。这就是我正在尝试的,但我一直收到

的错误

第 10 行:预期的二元运算符

#!/bin/bash

DIRECTORY=/.test_files
FILE=$*
if [ -e $DIRECTORY/$FILE ]; then
        echo "File already exists"
else
        cp $FILE $DIRECTORY
fi

所以如果脚本被命名为 copfiles.sh,我正在写...

./copyfiles.sh doc1.txt doc2.txt

它将移动文件,但如果它们已经存在,则不会读取错误消息。

此外,无论文件是否存在,我都会收到 "line 10: binary operator expected" 错误。谁能告诉我我做错了什么?

作为一个可能的问题,如果你有一个带有 space 的文件名或有多个参数 $* 将在其中包含 space,因此 [ -e $DIR/$FILE ] 将扩展为有很多单词,例如 [ -e /.test_files/First word and more ]-e 只需要 1 个单词。尝试将其放在引号中,例如

if [ -e "$DIRECTORY/$FILE" ]

当然,您可能只想将 $1 存储在 $FILE 中以获得第一个参数。

要测试所有要循环的参数并用类似

的东西测试每个参数
for FILE in "$@"; do
    if [ -e "$DIRECTORY/$FILE" ]; then
        echo "$FILE already exists"
    else
        cp "$FILE" $DIRECTORY
    fi
done

在 $@ 周围使用引号也可以在原始参数中保留 spaces