我正在将与 macOS 一起使用的外部硬盘驱动器的全部内容同步到 S3 存储桶。我想排除所有 macOS 隐藏文件。
我已经尝试过:
aws s3 sync --dryrun --exclude "^\." --exclude "\/\." ./ s3://bucketname
但是,我运行时的结果与以下完全相同:
aws s3 sync --dryrun . s3://bucketname
所以,我一定做错了什么。
有什么建议吗?
谢谢。
aws s3 sync --dryrun . s3://bucketname --exclude ".*" --exclude "*/.*"
添加两个排除参数将隐藏当前目录中的指定文件以及子文件夹中的任何文件。
这似乎有效:
aws s3 sync --dryrun . s3://bucketname --exclude ".*"
但是,我认为它不会排除子目录中的此类文件。
试试这个:
aws s3 sync --dryrun --exclude '*/.*'
这应该删除所有隐藏文件,包括子文件夹中的文件。
aws s3 sync /local/dir/ s3://bucket/dir --exclude '*/.*' --dryrun
或者,如果您只是同步一个没有任何子目录的目录:
aws s3 sync /local/dir/ s3://bucket/dir --exclude '*._*' --dryrun
在尝试自己弄清楚这一点后,我发现 --exclude 标志中使用的正则表达式与整个目录的名称有关,因此如果您有两个文件并且想要排除隐藏的文件,例如:
/my/dir/._video.mp4
/my/dir/video.mp4
您需要创建一个考虑整个目录的正则表达式,包括正斜杠 (/)。幸运的是,由于隐藏文件通常以“.”开头,我们可以推断出隐藏文件之前应该是“/”,当然,除非您试图排除根目录中的文件。如果您确实需要排除正在同步的目录根目录中的隐藏文件,则可以使用:
--exclude '*._*'
仅供参考,上述内容将排除名称中任何位置带有“._”的每个文件,但如果您故意这样命名文件,我可以提供一条建议:停止这样做。根据我的经验,macOS其隐藏文件名以点(.)开头,后跟下划线(_),我们可以利用它来发挥我们的优势。即便如此,我可能仍然更喜欢使用:
--exclude '*/.*'
主要是因为如果我的同步目录根目录中的一些隐藏文件被上传,那对我来说没问题。我只想排除绝大多数隐藏文件(即所有其他隐藏文件),因为我有许多子目录,其中有许多隐藏文件。
我使用
'*/.*'
以防万一我那里有名为“._”的文件,这违背了我自己的建议,时常发生。在我看来,这通常是因为当从网上下载文件或其他文件时,某些字符会自动转换为下划线。咆哮完了。
希望这有帮助!
aws s3 同步 --recursive --dryrun --exclude '/.'