例子

例子

我目前知道如何复制不存在的文件在目标目录中。这样我就可以根据自己的需要从 复制src 到。dst

但是,现在我想从 复制src到但只想复制到 在内部任何地方都不存在的dst/2016-01-05文件。srcdst

例子

假设开始的情况是

src/f1.txt
src/f2.txt
src/f3.txt

dst/2016-01-04/f1.txt
dst/2016-01-05/f0.txt

然后,复制完成后,最终情况应该是:

src/f1.txt
src/f2.txt
src/f3.txt

dst/2016-01-04/f1.txt
dst/2016-01-05/f0.txt

dst/2016-01-05/f2.txt
dst/2016-01-05/f3.txt

一般情况下,我并不想覆盖现有文件。即使源文件已更新。

答案1

下面的方法应该可以解决问题:-

today=`date +%Y-%m-%d`
ls -A src/ | while f=`line`; do if [ ! -f "dst/*/$f" ]; \
                 then mkdir -p "dst/$today"; cp "src/$f" "dst/$today/$f"; fi; done

笔记:-

  1. 与 的替代方法相比for f in src/*; ...,使用ls从源名称中去除目录,并-A包含以 , 开头的文件名.
  2. 如果有子目录,src/您将需要find在源目录中使用并src/从名称中去除-printf %P\\n
  3. 如果您没有该line命令,您可以使用while read f; ...,但这对带有前导和尾随空格的文件名不起作用(line如果文件名包含换行符也会失败 - 为此您需要使用find -print0xargs -0)。

相关内容