bash - 对于目录中的每个文件,只有在目录中不存在的情况下才将其复制到另一个目录中

时间:2012-09-27 12:04:57

标签: bash

非常感谢您提前帮助!

我有一个带有一些html文件的目录

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

我想编写一个bash函数来将该文件夹中的每个文件复制到一个新位置(简介/文件/),只有在那里不存在具有相同名称的文件时才会这样。

这是我到目前为止所做的:

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
}

大写字母是我被困的地方。

非常感谢。

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

像这样使用rsync:

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

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

答案 2 :(得分:0)

你需要一个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

答案 3 :(得分:0)

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

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