众所周知,cp -r source_dir aimed_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/)
如果您有binutils,则可以使用find过滤下一个cpio复制(并创建目录):
find \( ! -name *.dll \) -a \( ! -name *.exe \) | cpio -dumpv
如果目录不是很大,我通常会这样写:
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中建立目录(如果尚不存在)(mkdir的-p选项),然后将文件复制到该目录 。
上面的命令将复制所有文件。 最后,只需使用
find $src -type f | grep -v whatever | while ...... # same as above
过滤掉不需要的文件(例如\.bak$,\.orig$或您不想复制的任何文件)。
通过使用'grep -v'->排除文件来尝试此操作
cp `ls | grep -v `
这不会复制子目录。.您需要相应地修改命令。
对不起,不理解命令。 我在哪里放置源目录?
@ dganesh2002在这里将所有文件从当前目录复制到目标目录。 如果没有子目录,文件名没有空格,并且当前目录中的文件数不是太大,则单击
非常感谢dganesh2002和@atycnth。 尽管我仍然需要自己创建dest_dir,但我喜欢这种解决方案,因为它的机制很简单,而且我很容易记住。
将所有排除文件移至主目录或其他目录,将包含所有剩余文件的目录复制到目标文件夹,然后还原所有排除文件。
#cd mydirectory
#mv exclude1 exclude2 /home/
#cp mydirectory destination_folder/
#cd /home/
#mv eclude1 exclude2 mydirectory/