我目前知道如何复制不存在的文件在目标目录中。这样我就可以根据自己的需要从 复制src
到。dst
但是,现在我想从 复制src
到但只想复制到 在内部任何地方都不存在的dst/2016-01-05
文件。src
dst
例子
假设开始的情况是
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
笔记:-
- 与 的替代方法相比
for f in src/*; ...
,使用ls
从源名称中去除目录,并-A
包含以 , 开头的文件名.
。 - 如果有子目录,
src/
您将需要find
在源目录中使用并src/
从名称中去除-printf %P\\n
。 - 如果您没有该
line
命令,您可以使用while read f; ...
,但这对带有前导和尾随空格的文件名不起作用(line
如果文件名包含换行符也会失败 - 为此您需要使用find -print0
和xargs -0
)。