如我们所知, cp -r source_dir intention_new_directory 使用新名称创建源目录的副本。现在我想做同样的事情,但想要排除一个特定的文件。我在这里找到了一些相关的答案,使用 tar 和 rsync ,但在这些解决方案中,我需要先创建目标目录(使用mkdir)。
老实说我经常搜索,但没找到我想要的东西
到目前为止,我得到的最好的是:
tar -c --exclude=\*.dll --exclude=\*.exe sourceDir | tar -x -C destDir
答案 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/