删除未使用的文件夹并复制所需

时间:2015-02-20 09:22:11

标签: linux bash shell ubuntu

我试图用

删除所有文件夹
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循环中,但这些都以谬误结束。

非常感谢!

2 个答案:

答案 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/