假设我有两个目录:D1和D2。
D1(f1,f2,f3,f4) D2(f1,f2)
我想将D1中不在D2中的文件复制到另一个目录D3:
D3(f3,f4)
我如何在linux中执行此操作?
感谢名单, 三位一体
答案 0 :(得分:2)
看看'dirdiff'包裹。它允许您想要做的事情。
或者,这个bash命令行应该这样做:
for i in `ls D1` ; do if [ -f D2/$i ]; then echo "skip $i" ; else cp D1/$i D3 ; fi done
请注意ls D1
周围的后退 - 不是单引号! (在美式键盘上,它位于〜(代字号))
答案 1 :(得分:0)
从D1复制到D3时,使用-exclude指定D2 它会完成......
答案 2 :(得分:0)
只花了一天的时间来整理类似的东西,然后从较老的question的答案中挑选出来。我最终得到了一个相当复杂的bash脚本:
#!/bin/bash
# setup folders for our different stages
DIST=/var/www/localhost/htdocs/dist/
DIST_OLD=/var/www/localhost/htdocs/dist_old/
DIST_UPGRADE=/var/www/localhost/htdocs/dist_upgrade/
cd $DIST
find . -type f | while read filename
do
newfile=false
modified=false
if [ ! -e "$DIST_OLD$filename" ]; then
newfile=true
echo "ADD $filename"
elif ! cmp $filename $DIST_OLD$filename &>/dev/null; then
modified=true
echo "MOD $filename"
fi
if $newfile || $modified; then
#massage the filepath to not include leading ./
filepath=$DIST_UPGRADE$(echo $filename | cut -c3-)
#create folder for it if it doesnt exist
destfolder=$(echo $filepath | sed -e 's/\/[^\/]*$/\//')
mkdir -p $destfolder
#copy new/modified file to the upgrade folder
cp $filename $filepath
fi
done