Bash Shell 将文件从源复制到目标的脚本
Bash Shell Script to copy files from source to destination
我有一个与我的 bash shell 脚本相关的问题。
基本上,我需要开发一个脚本,将某些文件从一个目录复制到另一个目录。听起来很容易,然而,这对我来说是一个挑战,我希望你们中的一些人能帮助我。
所以脚本应该像这样工作:
脚本名Source_pathDestination_path
1) 第一个问题 - source_path 可能不存在,我需要回显一条错误消息。
2) 第二个问题 - 目标路径可能不存在,但是,我需要创建部分或全部目录,然后从源复制文件。否则,如果目录存在,我只需要复制。
希望这是清楚的,希望有人能帮助我,谢谢!
分别为参数一和二设置变量,源和目标..
src_dir=
dest_dir=
检查目录是否存在,不存在则退出
[[ -d $src_dir ]] || { echo "source dir not exist"; exit 1 ; }
创建路径中需要的所有目录
mkdir -p $dest_dir
如果你想使用 find
命令,试试这个:
find SRCPATH -exec mkdir -p DSTPATH/$(dirname "{}") \; -exec cp --parents "{}" DSTPATH \;
每个 -exec
标志开始执行一个 shell 代码块,并 \;
终止它。过去,将多个命令合并到一个 -exec
中对我来说是个问题,因此我包含两个命令,每个任务一个。
{}
是 find
的变量语法,表示当前路径 find
正在遍历。
注意:--parents
标志在 cp
的 Linux/GNU 变体上,但并非在 cp
的所有版本上都可用,因此下面的脚本较少依赖平台。此外,您的问题专门提到了使用脚本。
注意:SRCPATH
和DSTPATH
代表感兴趣的路径。如果源或目标的任何目录名称包含空格,则必须将它们括在 " "
中
或者您可以制作一个bash
脚本。
#!/bin/bash
srcpath=
dstpath=
if [ ! -d "$srcpath" ]; then
echo "Source path: $srcpath doesn't exist"
exit 1
fi
mkdir -p "$dstpath"
cp -r "$srcpath/*" "$dstpath"
if
语句中的-d
标志是测试目录yes/no 是否存在的标志。这里有一些关于 bash file test operators and other bash comparison operators
的信息
mkdir 上的 -p
标志告诉它根据需要填写路径的缺失部分。如果没有 -p
,mkdir
期望每个路径组件(路径的最后一个组件除外)都存在,否则它将失败。
cp 上的 -r
标志告诉 cp
递归复制所有子目录,以及 *
指示的文件到目的地,根据需要创建这些子目录。
注意:如果任何路径组成部分包含空格,路径周围的“”是为了防止错误。
看看这个:
find SOURCEPATH -type f | while read fname
do
mkdir -p TARGETPATH/$(dirname "$fname")
cp --parents $fname TARGETPATH
done
只需替换 SOURCEPATH 和 TARGETPATH 就可以了。如果 SOURCEPATH 不存在 (1),find
将显示一条错误消息,mkdir -p
将创建目录。
此脚本在 </code> 中创建整个目录结构,包括 <code>
:
中的空文件夹
#!/bin/sh
[ -z "" ] && { echo "Usage: [=10=] SOURCE DEST"; exit 1; }
[ ! -d "" ] && { echo "'' does not exist or isn't a directory"; exit 1; }
cp -r "" ""
如果要跳过空目录,则需要更多逻辑;除非 rsync
可用:
#!/bin/sh
[ -z "" ] && { echo "Usage: [=11=] SOURCE DEST"; exit 1; }
[ ! -d "" ] && { echo "'' does not exist or isn't a directory"; exit 1; }
rsync -mr "" ""
解释:
我有一个与我的 bash shell 脚本相关的问题。 基本上,我需要开发一个脚本,将某些文件从一个目录复制到另一个目录。听起来很容易,然而,这对我来说是一个挑战,我希望你们中的一些人能帮助我。 所以脚本应该像这样工作:
脚本名Source_pathDestination_path
1) 第一个问题 - source_path 可能不存在,我需要回显一条错误消息。
2) 第二个问题 - 目标路径可能不存在,但是,我需要创建部分或全部目录,然后从源复制文件。否则,如果目录存在,我只需要复制。
希望这是清楚的,希望有人能帮助我,谢谢!
分别为参数一和二设置变量,源和目标..
src_dir=
dest_dir=
检查目录是否存在,不存在则退出
[[ -d $src_dir ]] || { echo "source dir not exist"; exit 1 ; }
创建路径中需要的所有目录
mkdir -p $dest_dir
如果你想使用 find
命令,试试这个:
find SRCPATH -exec mkdir -p DSTPATH/$(dirname "{}") \; -exec cp --parents "{}" DSTPATH \;
每个
-exec
标志开始执行一个 shell 代码块,并\;
终止它。过去,将多个命令合并到一个-exec
中对我来说是个问题,因此我包含两个命令,每个任务一个。{}
是find
的变量语法,表示当前路径find
正在遍历。注意:
--parents
标志在cp
的 Linux/GNU 变体上,但并非在cp
的所有版本上都可用,因此下面的脚本较少依赖平台。此外,您的问题专门提到了使用脚本。注意:
SRCPATH
和DSTPATH
代表感兴趣的路径。如果源或目标的任何目录名称包含空格,则必须将它们括在" "
中
或者您可以制作一个bash
脚本。
#!/bin/bash
srcpath=
dstpath=
if [ ! -d "$srcpath" ]; then
echo "Source path: $srcpath doesn't exist"
exit 1
fi
mkdir -p "$dstpath"
cp -r "$srcpath/*" "$dstpath"
if
语句中的-d
标志是测试目录yes/no 是否存在的标志。这里有一些关于 bash file test operators and other bash comparison operators 的信息
mkdir 上的
-p
标志告诉它根据需要填写路径的缺失部分。如果没有-p
,mkdir
期望每个路径组件(路径的最后一个组件除外)都存在,否则它将失败。cp 上的
-r
标志告诉cp
递归复制所有子目录,以及*
指示的文件到目的地,根据需要创建这些子目录。注意:如果任何路径组成部分包含空格,路径周围的“”是为了防止错误。
看看这个:
find SOURCEPATH -type f | while read fname
do
mkdir -p TARGETPATH/$(dirname "$fname")
cp --parents $fname TARGETPATH
done
只需替换 SOURCEPATH 和 TARGETPATH 就可以了。如果 SOURCEPATH 不存在 (1),find
将显示一条错误消息,mkdir -p
将创建目录。
此脚本在 </code> 中创建整个目录结构,包括 <code>
:
#!/bin/sh
[ -z "" ] && { echo "Usage: [=10=] SOURCE DEST"; exit 1; }
[ ! -d "" ] && { echo "'' does not exist or isn't a directory"; exit 1; }
cp -r "" ""
如果要跳过空目录,则需要更多逻辑;除非 rsync
可用:
#!/bin/sh
[ -z "" ] && { echo "Usage: [=11=] SOURCE DEST"; exit 1; }
[ ! -d "" ] && { echo "'' does not exist or isn't a directory"; exit 1; }
rsync -mr "" ""
解释: