2014-09-24 20 views
0

正如我们所知,cp -r source_dir intended_new_directory使用新名称创建源目录的副本。现在我想要做同样的事情,但想排除一个特定的文件。我在这里找到了一些相关的答案,使用tarrsync,但在这些解决方案中,我需要首先创建目标目录(使用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/

回答

0

通过使用 'grep的-v' 不包括文件试试这个 - >

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

这不会复制子目录..您需要相应地修改命令。 – dganesh2002 2014-09-24 17:37:13

+0

对不起,不明白命令。我在哪里放源目录? – iloveX 2014-09-24 19:00:08

+1

此处@ dganesh2002将_current_目录中的所有文件复制到目标目录。 OK,如果没有子目录,文件名没有空格,并且当前目录中的文件数量不是很大。 – afenster 2014-09-24 19:30:43

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选项mkdir),然后将该文件复制到该目录。

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

find $src -type f | grep -v whatever | while ...... # same as above 

过滤掉不需要的文件(例如\.bak$\.orig$,或任何文件,你不想复制)。

0

如果你有binutils的,你可以使用find旁边cpio过滤复制(和创建目录):

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

移动全部排除文件到家庭或其他目录,复制包含所有剩余的文件目录目标文件夹然后恢复所有排除文件。

#cd mydirectory 
#mv exclude1 exclude2 /home/ 
#cp mydirectory destination_folder/ 
#cd /home/ 
#mv eclude1 exclude2 mydirectory/ 
相关问题