我试图用
删除所有文件夹rm -R !(foo|bar|abc)
排除给定的文件夹名称,可以是两个或更多。
工作正常!
在下一步中,我需要从此文件夹中的另一个方向复制所需的丢失文件夹。
我尝试过关注,但它不起作用,它也应该灵活处理文件夹数量。
rm -R !($neededfolders)
ownedfolders=$(ls ./dest/) #
find ../source/ -maxdepth 1 -type d | grep "$neededfolders" | grep -v "$ownedfolders" | xargs cp -Rt ./dest/
我的代码问题是grep不会使用多个名字,我也尝试声明自己的文件夹,将第二个grep设置为
grep -v ${ownedfolder[i]}
并将整个事情放在for循环中,但这些都以谬误结束。
非常感谢!
答案 0 :(得分:1)
您可以使用for循环:
needed='@(foo|bar|abc)'
for dir in ../source/*/ ; do
dir=${dir%/}
if [[ $dir == ../source/$needed && ! -d dest/${dir##*/} ]] ; then
cp -R "$dir" dest/
fi
done
这可以避免由$ownedfolders
的输出填充的丑陋变量ls
。
答案 1 :(得分:0)
您需要使用-E
grep
选项来启用扩展正则表达式,以识别|
替代方案:
find ../source/ -maxdepth 1 -type d | grep -E "$neededfolders" | grep -v -E "$ownedfolders" | xargs cp -Rt ./dest/