【问题标题】:cp -r without hidden filescp -r 没有隐藏文件
【发布时间】:2012-07-19 08:47:40
【问题描述】:

我有两个目录,一个是空的。

第一个目录有许多带有隐藏文件的子目录。当我 cp -r 内容从第一个目录到第二个目录时,隐藏文件也会被复制。有什么办法可以逃脱?

【问题讨论】:

  • 这是可行的,但复制后删除它们可能更简单
  • 是的,但在我的情况下,将隐藏文件复制到其他位置是一种安全隐患。

标签: linux bash cp


【解决方案1】:

您可以使用rsync 代替cp

rsync -av --exclude=".*" src dest

这不包括隐藏文件和目录。如果您只想排除隐藏目录,请在模式中添加斜杠:

rsync -av --exclude=".*/" src dest

【讨论】:

  • 与 cp 相比是否有任何开销?
  • @Rahul 我没有想到要对它进行基准测试,但我认为你不应该担心这一点
  • 它很酷!谢啦!仅供参考,当文件很大时 rsync 会很好,但在文件较小的情况下等于 cp。
  • rsync在各方面都比cp强大得多,所以你应该使用rsync作为你的文件传输工具
  • 似乎没有忽略子目录中的隐藏文件(至少在 macOS Big Sur 上)
【解决方案2】:

你可以的

cp -r SRC_DIR/* DEST_DIR

排除 SRC_DIR 级别中的所有 .files 和 .dirs,但仍会复制下一级子目录中的所有隐藏文件。

【讨论】:

  • 这正是问题所在.. :)
  • 但它适用于 GIT-Repos,如果你不想在 .git/ 中复制整个 GIT-Index ...
  • 我 +'d 这个答案,因为这是我正在寻找的解决方案。我不想排除树上的所有不可见者,只排除根级别的不可见者!
  • 另一个变种cp SOURCE/[!.]* TARGET.
【解决方案3】:

rsync 有“-C”选项

http://rsync.samba.org/ftp/rsync/rsync.html

示例:

rsync -vazC  dir1 dir2

【讨论】:

  • 你是对的。我试过 mkdir -p dir1/subdir;触摸 dir1/subdir/.cvs; rsync -avzC dir1 dir2
  • rsync -av --exclude=".*" src dest 效果很好。请参阅尤金的上述答案。不管怎么说,还是要谢谢你! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 2018-09-30
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多