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

时间:2015-01-28 23:17:55

标签: bash directory cp

所以我正在进行一项任务,要求我在bash中编写一个shell脚本,它将2个现有目录名作为前2个参数,并将2的内容复制到第3个参数指定的目录中。当2个目录只包含常规文件但是如果它们包含我遇到的任何目录时,这种情况有效。但是,cp:无法统计' {所有文件名}'"错误。如何修复此错误?

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

#! /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 $1 -a -d $2 ]
then
    ls1=`ls "$1"`
    ls2=`ls "$2"`
else
    error
    exit
fi

CD=`pwd`

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

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

ls1=${ls1//
/ }

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

cd "$CD"
cd "$2"

ls2=${ls2//
/ }

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

1 个答案:

答案 0 :(得分:0)

要复制的单个文件需要作为单独的参数传递给cp。您在单个参数中传递了一个以空格分隔的文件名列表 - 这意味着cp正在尝试查找一个名称与所有连接在一起的单个文件目录中的单个文件名(因为这些名称由ls提供)。

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

filenames=( * )

......扩展为:

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