我想将一个目录中除了一个名为Default.png的文件之外的所有文件都复制出来。看起来有许多方法可以实现这一点。对你来说,最有效的方法是什么?
我想将一个目录中除了一个名为Default.png的文件之外的所有文件都复制出来。看起来有许多方法可以实现这一点。对你来说,最有效的方法是什么?
应该如下:
cp -r !(Default.png) /dest
如果将内容复制到当前文件夹中的一个嵌套文件夹中(在下面的示例中称为example),那么您还需要省略该目录:cp -r !(Default.png|example) /example
shopt -s extglob
才能工作。 - Barry Kellyshopt -s extglob
。有了它,它就可以完美运行了。 - Kat!()
...太棒了!对于那些像我一样觉得是时候学习/复习Bash的人,这里是与此问题/答案相关的链接:shopt/extglob和the pattern。 - Brandtcp -r $src_path/!($file) $dest_path
,但实际上它相当于 cp $src_path/* $dest_path/ --exclude $file
,如果 cp 命令有这样的参数的话。 - mazunkirsync 长期以来一直是我用来替代 cp/scp 的工具:
rsync -av from/ to/ --exclude=Default.png
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
-v, --verbose increase verbosity
如果 src/
目录下只包含文件,那就简单了:
find src/ ! -name Default.png -exec cp -t dest/ {} +
src/
有子目录,这个命令会省略它们,但会复制它们内部的文件。find src/ -type f ! -name Default.png -exec cp -t dest/ {} +
src/
下有子目录,则不会递归到子目录中:find src/ -type f -maxdepth 1 ! -name Default.png -exec cp -t dest/ {} +
\;
每个文件都会执行一次该命令。 +
一次运行该命令并同时将所有文件名传递给它(受命令行长度限制)。 总的来说,+
更加高效。 - John Kugelmancp `ls | grep -v Default.png` destdir
myDefaultXpng.OLD
这样的文件名。 - Dennis Williamson这是最简单的方法(并不复杂)。
首先,创建一个"temp"文件夹:
mkdir temp
“-R”标志可以精确地复制包括“符号链接”在内的所有文件
cp -R originalFolder/. temp/
rm temp/Default.png
cp -R temp/. destinationFolder/
cp -R originalFolder/!(Default.png) destinationFolder/
I'd just do:
cp srcdir/* destdir/ ; rm destdir/Default.png
find srcdir -type f/ |grep -v Default.png$ |xargs -ILIST cp LIST destdir/
destdir
和srcdir
中都存在Default.png
,它将用srcdir
中的替换destdir
中的,并删除复制的Default.png
。相反,OP想要保留已经存在于destdir
中的Default.png
。 - SnowFrog以下脚本对我有效
cp -r `ls -A | grep -v 'skip folder/file name'` destination
# chattr +i /files_to_exclude
# cp source destination
# chattr -i /files_to_exclude
使用Shell的扩展参数与正则表达式
cp /<path>/[^not_to_copy_file]* .
除了not_to_copy_file之外,所有内容都将被复制。
如果有任何问题,请指明!
[...]
)包含要匹配的一组字符,而前导的 ^
将导致匹配所列字符的补集。在以下示例中,将不会列出任何文件:touch not_to_copy_file to_copy_file; ls [^not_to_copy_file]*
,因为所有以以下任何一个字符开头的文件名都将被排除:_cefilnopty
。 - rtx13