bashshell使用break和continue将文件从一个位置复制到另一个位置

bashshell使用break和continue将文件从一个位置复制到另一个位置,bash,Bash,我有一个小脚本将所有文件从一个目录(SRC)复制到另一个目录(DES)。下面的脚本运行良好 #!/bin/bash SRC="/home/user/dir1/*" DES="/home/user/dir2/" for file in "$SRC" do if [ -f "$file" ] then cp "$file" "$DES" echo "$file -----> file copied"

我有一个小脚本将所有文件从一个目录(SRC)复制到另一个目录(DES)。下面的脚本运行良好

#!/bin/bash

SRC="/home/user/dir1/*"
DES="/home/user/dir2/"

for file in "$SRC"
do
       if [ -f "$file" ]
       then
              cp "$file" "$DES"
              echo "$file -----> file copied"   
       fi
done
现在,当我将文件从一个目录复制到另一个目录时,如果该文件已经存在于(DES)目录中且名称与(SRC)目录相同,那么如何跳过复制文件,并像往常一样从源目录继续复制到目标目录

这里我如何使用中断并继续循环来执行此操作


谢谢,

为什么不将整个脚本简化为一行呢

cp -n /home/user/dir1/* /home/user/dir2/
-n
标志(
--no clobber
)可防止
cp
覆盖现有文件


如果您的实际情况更复杂,您还可以看看
rsync

为什么不将整个脚本简化为一行呢

cp -n /home/user/dir1/* /home/user/dir2/
-n
标志(
--no clobber
)可防止
cp
覆盖现有文件


如果您的实际情况更复杂,您还可以查看
rsync

我建议使用
rsync

src="/home/user/dir1/"
dst="/home/user/dir2/"
rsync -rav --ignore-existing "${src}" "${dst}"

开关“忽略现有文件”告诉
rsync
跳过目标上存在的文件。

我建议使用
rsync

src="/home/user/dir1/"
dst="/home/user/dir2/"
rsync -rav --ignore-existing "${src}" "${dst}"

开关
--ignore existing
告诉
rsync
跳过目标上存在的文件。

检查-e文件名这将只复制一个文件:
/home/user/dir1/*
。由于引用了所有参数,因此不会执行全局展开。
对于$SRC中的文件
有其自身的问题,因为该值会被拆分。设置
SRC=/home/user/dir1
,然后对“$SRC”/*中的文件迭代
,或者使用数组存储扩展的名称列表:
SRC=(/home/user/dir1/*);对于“${SRC[@]}”中的文件
。没有好方法将全局变量存储在变量中以便以后展开。为什么要使用“中断并继续”?不需要它们。请检查-e filename这将只复制一个文件:
/home/user/dir1/*
。由于引用了所有参数,因此不会执行全局展开。
对于$SRC中的文件
有其自身的问题,因为该值会被拆分。设置
SRC=/home/user/dir1
,然后对“$SRC”/*
中的文件迭代
,或者使用数组存储扩展的名称列表:
SRC=(/home/user/dir1/*);对于“${SRC[@]}”中的文件
。没有好方法将全局变量存储在变量中以便以后展开。为什么要使用“中断并继续”?没有必要这样做。