我想将所有文件从一个名为Default.png的目录中复制出来。看来有很多方法可以做到这一点。什么似乎对你最有效?BASH复制除一个以外的所有文件
回答
简单,如果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/ {} +
这对我来说是最好的,因为看起来OS X没有启用glob。 – 2009-08-21 20:54:31
请问有人能解释一下命令结尾处的“加号”是什么?我总是看到\;在-exec选项的末尾,它是一样的吗? – Max 2014-09-21 22:28:04
@Max'\;'每个文件执行一次命令。 '+'运行一次命令并将所有文件名一次传递给它(受命令行长度限制)。一般来说,'+ +更高效一点。 – 2014-09-22 00:48:51
应该如下:
cp -r !(Default.png) /dest
如果复制到嵌套在当前文件夹(称为在下面的案例)的文件夹,你需要省略目录也:
cp -r !(Default.png|example) /example
这会产生 -bash:!:未找到事件 – 2009-08-21 18:46:49
是否将文件复制到嵌套在复制文件夹内的文件夹中? – Jon 2009-08-21 18:48:07
这需要'shopt -s extglob'工作,如果它已被禁用。 – 2009-08-21 18:52:40
我'd只是这样做:
cp srcdir/* destdir/ ; rm destdir/Default.png
除非文件很大。否则使用例如
find srcdir -type f/ |grep -v Default.png$ |xargs -ILIST cp LIST destdir/
grep -v是你的朋友 – 2009-08-21 19:02:08
第一个命令不是OP所要求的。如果'Default.png'存在于两个目录中,它将会替换'srcdir'中的'destdir'中的一个,然后删除复制的'Default.png'。相反,OP希望保留'destdir'中已存在的'Default.png'。 – SnowFrog 2017-05-22 11:34:33
的rsync一直是我的CP/SCP更换了很久:
rsync -av from/ to/ --exclude=Default.png
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
-v, --verbose increase verbosity
您的回答与我所有的rsync命令一样不清楚。这就是为什么我不使用它。什么是'rlptgoD'和什么是'HAX'?为什么要创建一个档案? – Simon 2017-07-27 07:07:21
cp `ls | grep -v Default.png` destdir
这比您想要的更容易产生错误。 – 2009-08-22 01:40:18
这适合我最好的 – once 2017-01-20 03:10:07
# chattr +i /files_to_exclude
# cp source destination
# chattr -i /files_to_exclude
- 1. NSIS - 删除除一个文件以外的所有文件
- 2. Bash:删除除最后10个日志文件以外的所有文件
- 3. Laravel 5 Elixir:复制除了一些文件以外的所有文件
- 4. SVN:提交除一个文件以外的所有文件
- 5. 获取除一个文件夹以外的所有文件
- 6. 如何排除除一个以外的所有文件夹?
- 7. Unix scipt复制除最新时间戳文件以外的所有文件
- 8. 删除除一个重复记录以外的所有记录
- 9. bash:删除文件名中除最后一个版本以外的所有文件
- 10. 复制除了其中一些列以外的所有列
- 11. Bash/sed:删除除了匹配以外的所有文本文件
- 12. 关闭所有打开的excel文件,除了一个以外
- 13. 如何预编译除一个以外的所有Javascript文件?
- 14. IIS - 使用HttpHandler除了一个以外的所有文件
- 15. PHPStorm查找和替换除一个以外的所有文件
- 16. 如何Git提交除一个文件以外的所有(。)?
- 17. 将除特定行以外的所有行复制到文本文件
- 18. 将所有子文件夹从一个复制到另一个,但java中的一些子文件夹除外?
- 19. 构建事件:复制除一个文件以外的文件夹
- 20. 在bash脚本中删除除最新3以外的所有文件
- 21. 删除除C#中的文件以外的所有文件夹
- 22. 删除除4个最新目录以外的所有文件
- 23. Shell - 删除除单个文件夹以外的所有内容
- 24. Windows Cmd行删除命令删除除一个以外的所有文件
- 25. Inotifywait排除除特定文件以外的所有文件
- 26. 删除除特定文件夹以外的所有文件夹
- 27. 每60秒复制一个文件bash
- 28. 限制从一个文件除外的所有文件的访问
- 29. 以bash不同的顺序将所有文件的内容复制到一个文件中
- 30. .htaccess拒绝访问除一个文件以外的所有文件
为什么你需要它来跳过这个文件,而不是复制它后,只是删除了吗?它是否已经存在于目标目录中? – 2009-08-21 18:48:40
是的,具有相同名称的文件已经存在于目标目录中。 – 2009-08-21 20:53:02
@ LasseV.Karlsen:或者如果它是一个大文件,您可以节省复制它的时间。我对此感兴趣,但不包括目录而不是文件。 – 2012-11-20 16:13:02