使用'cp'并保留目录的属性,但不复制任何子目录

时间:2011-12-10 00:04:17

标签: macos terminal sync

我正在制作文件同步程序。为了提高同步的效率,我只对来自源的新文件/文件夹进行同步/复制。无论如何,当我将目录复制到同步时,我使用'cp pR itemName ,因为它保留了目录和图标的属性(如果它存在)。但是,遗憾的是它还复制了该目录中包含的所有文件...我不希望复制子项(除了一些不可见的文件),我想一次复制一个项目。有没有一种方法可以自己编程复制目录(不包括它的子文件)但仍然保留它的属性(如创建日期和图标)?

1 个答案:

答案 0 :(得分:0)

您想使用rsync。 Rsync创建所有文件的列表,并仅复制已修改的文件。这真的很快。 我做

rsync -avzr filesIwant WhereItShouldGo

但是,为了回答你的问题,你可以列出文件并用grep排除你不想要的文件并使用xargs,运行你的行动。 让我们说你跑了ls,这就是你得到的

#:~ cy$ ls
BackEnd         Downloads       Pictures
CSC 130         Library         Public
Checkbook.java      Movies          Site and Code
Desktop         Music           Sites
Documents       NetBeansProjects

并且假设您想要所有内容,而不是音乐文件夹或电影文件夹中的任何内容 你可以这样做:

#:~ cy$ ls | grep -v Music | grep -v Movies
BackEnd
CSC 130
Checkbook.java
Desktop
Documents
Downloads
Library
NetBeansProjects
Pictures
Public
Site and Code
Sites

通知电影和音乐未列出。那么现在你可以运行xargs并执行操作。因为我不想删除任何东西,我不会这样做,但这就是它的样子

#:~ cy$ ls | grep -v Music | grep -v Movies| xargs -I xx cp xx  ToSomePlace

xargs的-I命令从最后一个命令获取输入,并给它一个昵称,在我的情况下" xx"这样你就可以在xx上调用命令,知道它们都是最后一个命令的元素。希望有所帮助。