0

非常感谢您的帮助!

我有一个包含一些 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
}

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

非常感谢你。

4

4 回答 4

4

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

   -n, --no-clobber
          do not overwrite an existing file (overrides a previous -i option)
于 2012-09-27T12:07:47.667 回答
2

像这样使用 rsync:

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

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

于 2012-09-27T12:27:35.893 回答
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
于 2012-09-27T12:07:46.793 回答
0

您的$f变量包含完整路径,因为/*. 尝试做类似的事情:

for ff in $orig_html/*
  do
    thisFile=${ff##*/}
    if [ ! -f ${dest_html}/$thisFile ]; then
       cp $ff ${dest_html}
    fi
  done
于 2012-09-27T13:05:05.287 回答