我想复制一个目录中的所有文件,除了特定子目录中的一些文件。 我注意到cp命令没有——exclude选项。 那么,我怎么才能做到呢?
当前回答
只需将其临时移动到一个隐藏目录中(如果需要的话,可以重新命名它)。
mkdir .hiddendir
cp * .hiddendir -R
mv .hiddendir realdirname
其他回答
这是对Linus Kleen的回答的修改。他的回答对我没用,因为会有。添加在cp不喜欢的文件路径前面(路径看起来像source/.destination/file)。
这个命令对我很管用:
找到。-type f -not -path '*/ exclude -path/*' -exec cp——parents '{}' '/destination/' \;
——parents命令保留目录结构。
Rsync又快又简单:
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude
你可以使用-排除多次。
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude --exclude anotherfoldertoexclude
注意——exclude选项后的目录thefoldertoexclude是相对于源文件夹的,即:sourcefolder/thefoldertoexclude。
此外,您还可以添加-n进行演练,以查看在执行实际操作之前将复制什么,如果一切正常,则从命令行中删除-n。
我发现的最简单的方法是,你可以复制除文件和文件夹以外的所有文件,只需在括号中添加它们的名称:
shopt -s extglob
cp -r !(Filename1 | FoldernameX | Filename2) Dest/
另一个更简单的选项是安装并使用rsync,它有一个——exclude-dir选项,可以用于本地和远程文件。
cp -rv `ls -A | grep -vE "dirToExclude|targetDir"` targetDir
编辑:忘记排除目标路径(否则它将递归复制)。