Script Bash-cp目标不是目录-使用变量

问题描述 投票:0回答:1

我知道这类问题可能重复了。但就我而言,我使用的变量包含目标目录,并且错误提示该目录无效。

cp目标var2不是目录

现在,这是我的代码,我试图将文件夹图像((包含在桌面中)中的所有图像复制到文件夹照片(也包含在桌面中并且为空)。我使用GIT Bash对于Windows 10

function pause(){

    read -p "$*"
}

echo "Help: Use the bar / to separate the directory names"
echo ""

echo "Enter the directory location"
read var1

echo "Enter the destinity directory location"
read var2

for var1 in "var2"
do
    cp * var1 var2
done

echo ""
pause "Press [ENTER] to continue..."

我怎么了?谢谢!

执行脚本时,我使用的目录是:

C:/用户/毛里/桌面/图像

而var2是:

C:/用户/毛里/桌面/照片

将这段代码放入for:

cp -r * $ var1 $ var2

将桌面中的所有存档移动到了照片文件夹,这不是我的目标,我想将桌面中的图像文件夹中包含的仅图像移到空文件夹照片也可以在桌面上。

git-bash
1个回答
0
投票

代替您的for循环,如果我们可以运行cp "$var1/"*.{jpg,png,gif} "$var2",那就太好了。这是将扩展名为jpgpnggif的所有文件从$var1复制到$var2的简便方法。遗憾的是,如果碰巧没有给定扩展名之一的文件,则该命令将失败,例如,如果我们有多个jpg文件但没有gif

所以我们必须使事情复杂一些,我们的答案是find命令,如下所示。如果要添加更多图像文件类型,只需在括号内添加另一组-o -name '*.EXT',其中EXT是所需的文件扩展名。

function pause(){

    read -p "$*"
}

echo "Help: Use the bar / to separate the directory names"
echo ""

echo "Enter the source directory"
read source

echo "Enter the destination directory"
read dest

find $source \( -name '*.jpg' -o -name '*.gif' -o -name '*.jpeg' -o -name '*.png' \) -exec cp -prv {} $dest \;

echo ""
pause "Press [ENTER] to continue..."

-prv上的cp标志表示保留属性,以递归方式复制,并使用详细模式(打印已复制的内容)。

© www.soinside.com 2019 - 2024. All rights reserved.