bashshell使用break和continue将文件从一个位置复制到另一个位置
我有一个小脚本将所有文件从一个目录(SRC)复制到另一个目录(DES)。下面的脚本运行良好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"
#!/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[@]}”中的文件
。没有好方法将全局变量存储在变量中以便以后展开。为什么要使用“中断并继续”?没有必要这样做。