从命令行参数使用 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
我想创建一个脚本,允许我从命令行输入多个文件名,并让脚本将这些文件复制到另一个目录。这就是我正在尝试的,但我一直收到
的错误第 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