我有一个包含文件和子目录的目录。我只想复制目录中的文件,因此我运行
cp -v src/* dst/
并出现错误cp: -r not specified; omitting directory
。我可以忽略它,但如果-e
设置了 bash 标志,命令就会失败。
如果我不想递归复制并且想要-e
标志,我该如何避免脚本失败?我唯一能想到的就是使用,find -type f -maxdepth... -exec cp...
但它看起来太重了。有没有更简单的方法?
附言:我知道-e
底部岩石,谢谢。
答案1
-e
在脚本中设置但仍存在可能产生错误的命令的一种常见技巧是使它们成为条件命令的一部分,例如
cp -v src/* dst/ || true
此构造永远不会产生导致脚本退出的错误。无需复杂的编程,并且它适用于许多命令,而不仅仅是示例cp
。
答案2
启用“扩展 glob”(shopt -s extglob)后,用于src/!(*/)
匹配所有项目除了那些匹配的src/*/
(目录或目录的符号链接)。
复制特定文件的另一种常见方法是cpio -p
。find src/ [...] | cpio -p dst/