在Mac上通过命令行删除当前文件夹和所有子文件夹中的.DS_STORE文件

212

2
你知道吗,这个投票系统有点奇怪。在2022年6月10日,这是一个受欢迎度很高的问题(159个赞),而排名前五的回答总计有408个净赞。但是唯一一个从更广泛的背景来看待这个问题的回答,只获得了不到总体净赞数的1% - user5395338
相关:如何防止它们被创建 defaults write com.apple.desktopservices DSDontWriteNetworkStores true(并重新启动)。 - norok2
8个回答

406

find 命令可以做到这点。只需添加 -delete 参数:

find . -name ".DS_Store" -delete

将其扩展到打印它们的相对路径

find . -name ".DS_Store" -print -delete

为了更加谨慎,您可以排除目录并仅过滤文件。

find . -name ".DS_Store" -type f -delete

4
你需要把文件名改为**".DS_Store"**,如果使用了".DS_STORE",它将不起作用,因为文件名是区分大小写的。 - Amr Lotfy
2
@AmrLotfy 这并不完全正确,Mac的默认文件系统是不区分大小写的。 - Others
28
为了更加谨慎,我通常会排除这样的目录:find . -name '.DS_Store' -type f -delete - xApple
我会将这行代码添加到我的 .bashrc_profile 文件中,以便每次启动 shell 时都可以清理文件。如何使它更少冗长或完全静音? - Danijel
@Danijel 一般来说,你可以在 Unix 命令后面添加 2>/dev/null 1>/dev/null 来使其静音。 - Samie Bencherif

68
find . -name ".DS_Store" -print -delete

这将删除当前路径中所有名为.DS_Store的文件,并显示它们的相对路径。


3
@kelin,既然没有链接,这怎么可能是仅限链接的答案? - pppery
1
@ppperry,这是来自审核的自动消息。我投票删除了你的回答,因为与被接受的回答相比,它没有添加任何重要内容。 - kelin
6
我喜欢在这里加上“-print”。 - Eric Majerus

13

以下是如何递归删除 .DS_Store 文件的方法:

打开终端 在命令行中,转到包含所有文件和文件夹的文件夹的位置:

cd to/your/directory

最后,键入以下命令:

find . -name '.DS_Store' -type f -delete

按下回车键

干杯!!


繁殖cd迷信是对社区的不利影响。只需将目录名称作为find的第一个参数而不是.即可。另请参见什么是当前工作目录? - tripleee

11

您还可以使用扩展的通配符(**):

rm -v **/.DS_Store

在zsh、bash 4以及类似的shell中(如果未启用,请通过shopt -s globstar激活)。


我发现问题是导航文件夹中的一个 .DS_Store 文件。grep -r "\x00" app/src/main/resrm -v **/.DS_Store这解决了问题。 - display name

10

最干净的做法是使用:

find . -type f \( -name ".DS_Store" -o -name "._.DS_Store" \) -delete -print 2>&1 | grep -v "Permission denied"

这将删除文件,隐藏“权限被拒绝”错误(同时保留其他错误),打印出已删除文件的清单。


9
以上的回答都是可行的,但如果您使用的是Mac电脑,并仍然在Mac系统上,那么存在一个更大的问题。上述命令确实会删除所有的.DS_Store文件,但由于这是默认行为,Finder会立即重新创建它们。您可以在此处了解有关其所有运作方式的详细信息。引用该文章的话,如果您使用的是Mac电脑,则应该只在真正需要的情况下删除它们:

除非您有特定的原因要删除这些.DS_Store文件(例如Windows共享),否则最好将它们保持“原样”。删除.DS_Store文件没有性能上的好处。它们是无害的文件,通常不会导致任何问题。请记住,.DS_Store文件保存了您个性化的文件夹设置,如图标排列和列排序。这就是为什么您通常不想删除它们而是希望将它们隐藏起来的原因。

如果您确实需要删除它们,还有一种方法在这里没有提到:

sudo find / -name “.DS_Store” -depth -exec rm {} \;


1
“Finder重新创建它们…” 很好的观点——当我阅读所有这里精细的答案时,我也是这么想的…这就像杀蚂蚁一样:总是有更多的蚂蚁!在我的情况下,我正在尝试删除位于我的NAS音乐库中的.DS_Store文件——这是多年来懒惰复制和/或rsyncing的结果。 - user5395338
加一,如果你执行普通的 ls 命令,这个文件不会被列出来,因为它是隐藏的。 - Timo

0

使用文本编辑器创建一个新文件,将以下文本复制并粘贴到其中,然后使用“.sh”文件扩展名保存该文件,最后使用终端打开该文件。确保文本编辑器实际上保存的是原始文本,而不是将文件保存为富文本格式文件或其他带有附加信息的文本文件格式。

#!/bin/bash
echo -e "\nDrag a folder here and press the Enter or Return keys to delete all files whose names begin with a dot in its subfolders:\n"
read -p "" FOLDER
echo -e "\nThe following files will be deleted:\n"
find $FOLDER -name ".*"
echo -e "\nDelete these files? (y/n): "
read -p "" DECISION
while true
do
    case $DECISION in
        [yY]* ) find $FOLDER -name ".*" -delete
        echo -e "\nThe files were deleted.\n"
        break;;
        [nN]* ) echo -e "\nAborting without file deletion.\n"
        exit;;
        * ) echo -e "\nAborting without file deletion.\n"
        exit;;
    esac
done

0

这不完全是问题所在,但如果你想要实际压缩目录而不包括 .DS_STORE 文件,这个方法非常有效...

zip -r -X archive_name.zip folder_to_compress

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接