复制整个目录,不包括文件

时间:2014-09-24 17:08:39

标签: linux cp

如我们所知, cp -r source_dir intention_new_directory 使用新名称创建源目录的副本。现在我想做同样的事情,但想要排除一个特定的文件。我在这里找到了一些相关的答案,使用 tar rsync ,但在这些解决方案中,我需要先创建目标目录(使用mkdir)。
老实说我经常搜索,但没找到我想要的东西 到目前为止,我得到的最好的是:

tar -c --exclude=\*.dll --exclude=\*.exe sourceDir | tar -x -C destDir

(来自http://www.linuxquestions.org/questions/programming-9/how-to-copy-an-entire-directory-structure-except-certain-files-385321/

4 个答案:

答案 0 :(得分:0)

尝试使用' grep -v'排除文件。 - >

cp `ls | grep -v <exclude-file>` <dest-dir>

答案 1 :(得分:0)

如果目录不是很大,我曾经写过这样的东西:

src=path/to/source/directory
dst=path/to/destination/directory
find $src -type f | while read f ; do mkdir -p "$dst/`dirname $f`"; cp "$f" "$dst/$f" ; done

在这里,我们列出$src中的所有常规文件,遍历此列表,并为每个文件在$dst中创建一个目录(如果它尚不存在)-p选项{{1然后将文件复制到该目录。

上述命令将复制所有文件。最后,只需使用

mkdir

过滤掉您不需要的文件(例如find $src -type f | grep -v whatever | while ...... # same as above \.bak$或您不想复制的任何文件。

答案 2 :(得分:0)

如果您有binutils,可以使用find过滤下一个cpio来复制(和创建目录):

find <sourceDir>  \( ! -name *.dll \) -a \( ! -name *.exe \) | cpio -dumpv <destDir>

答案 3 :(得分:-1)

将所有排除文件移至主目录或其他目录,将包含所有剩余文件的目录复制到目标文件夹,然后恢复所有排除文件。

#cd mydirectory
#mv exclude1 exclude2 /home/
#cp mydirectory destination_folder/
#cd /home/
#mv eclude1 exclude2 mydirectory/