对于目录中的每个文件,仅当它不存在时才将其复制到另一个目录中



非常感谢您的帮助!

我有一个目录,里面有一些html文件

$ ls template/content/html
devel.html
idex.html
devel_iphone.html
devel_ipad.html

我想写一个bash函数,将该文件夹中的每个文件复制到一个新位置(introduction/files/),前提是那里还不存在同名文件。

这就是我目前所拥有的:

orig_html="template/content/html";
dest_html="introduction/files/";
function add_html {
for f in $orig_html"/*";
do
if [ ! -f SAME_FILE_IN_$dest_html_DIRECTORY ];
then
cp $f $dest_html;
fi
done
}

大写字母是我被卡住的地方。

非常感谢。

-n选项是否足以满足您的需求?

-n, --no-clobber
do not overwrite an existing file (overrides a previous -i option)

像这样使用rsync:

rsync -c -avz --delete $orig_html $dest_html

html与基于$dest_html的文件校验和保持一致。

您需要bash脚本吗?cp支持-r(递归)选项和-u(更新)选项。来自手册页:

-u, --update
copy only when the SOURCE file is  newer  than  the  destination
file or when the destination file is missing

由于/*,您的$f变量包含完整路径。试着做一些类似的事情:

for ff in $orig_html/*
do
thisFile=${ff##*/}
if [ ! -f ${dest_html}/$thisFile ]; then
cp $ff ${dest_html}
fi
done

相关内容

  • 没有找到相关文章

最新更新