cp {fileList}* dir_name 其中 fileList 包含文件和目录

cp {fileList}* dir_name where fileList contains files and directories

所以我正在做一项作业,要求我在 bash 中编写一个 shell 脚本,它将 2 个现有目录名称作为其前 2 个参数并复制 2 个的内容进入第三个参数指定的目录。这在 2 个目录仅包含常规文件但如果它们包含任何目录时有效,我遇到了 "cp: cannot stat '{all the file names}'" 错误。如何修复此错误?

这是我的整个脚本。任何帮助将不胜感激。

#! /bin/bash

shopt -s expand_aliases
alias error='echo "usage: cpdirs.sh source_directory1 source_directory2 dest_directory"'

if [ $# -ne 3 ]
then
    error
    exit
fi

if [ -d  -a -d  ]
then
    ls1=`ls ""`
    ls2=`ls ""`
else
    error
    exit
fi

CD=`pwd`

if [ ! -d "" ]
then
    mkdir ""
fi

cd ""
thrd=`pwd`
cd "$CD"
cd ""

ls1=${ls1//
/ }

if [ -n "$ls1" ]
then
    cp -R "$ls1" "$thrd"
fi

cd "$CD"
cd ""

ls2=${ls2//
/ }

if [ -n "$ls2" ]
then
    cp -R "$ls2" "$thrd"
fi

要复制的单个文件需要作为单个参数传递给 cp。您在单个参数 中传递一个 space 分隔的文件名列表 - 这意味着 cp 正在尝试查找名称为结果的单个文件将目录中的所有单个文件名连接在一起(因为这些名称被 ls 修改)。

简短回答:根本不要这样做。 Don't use ls programatically, and particularly don't try to put multiple arguments in a single scalar variable。如果要在变量中存储多个文件名,请使用数组:

filenames=( * )

...扩展为:

cp -- "${filenames[@]}" /path/to/destination