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

Posted

技术标签:

【中文标题】从 Mac 上的命令行删除当前文件夹和所有子文件夹中的 .DS_STORE 文件【英文标题】:Delete .DS_STORE files in current folder and all subfolders from command line on Mac 【发布时间】:2015-08-09 14:38:45 【问题描述】:

我知道我可以在当前文件夹和所有子文件夹中使用 find . -name ".DS_Store" 到 find all the .DS_Store files。但是我怎么能同时从命令行中删除它们呢?我发现来回切换所有文件夹并一个一个删除它真的很烦人。

【问题讨论】:

【参考方案1】:

以上所有答案都有效,但如果一个人正在使用 mac 并且仍在 mac 上,则会出现更大的问题。描述的行do 删除所有DS_Store 文件,但Finder 会立即再次重新创建它们,因为这是默认行为。您可以阅读有关这一切的工作原理here。如果您使用的是 Mac,请从那里引用,只有在您真正需要时才应删除它们:

如果您没有特别的理由删除这些 .DS_Store 文件(Windows 共享可能是一个可靠的理由),最好让它们保持“原样”。删除 .DS_Store 文件没有性能优势。它们是无害的文件,通常不会引起任何问题。请记住,.DS_Store 文件保存了您的个性化文件夹设置,例如您的图标排列和列排序。这就是为什么您通常不想删除它们而是隐藏它们。

如果你真的这样做了,还有一种方法,这里没有提到:

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

【讨论】:

【参考方案2】:

这里是递归删除.DS_Store文件的方法

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

cd to/your/directory

最后,输入以下命令:

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

按回车

干杯!!

【讨论】:

【参考方案3】:
find . -name ".DS_Store" -print -delete

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

【讨论】:

@kelin 呃,没有链接的情况下,这是一个仅链接的答案吗? @ppperry,这是来自评论的自动消息。我投票删除了您的答案,因为与接受的答案相比,它没有添加任何重要的内容。 我喜欢在这里添加-print【参考方案4】:

这不完全是问题,但如果你真的想压缩没有.DS_STORE 文件的目录,这是一种享受...

zip -r -X archive_name.zip folder_to_compress

【讨论】:

【参考方案5】:

干净利落的最好方法是使用:

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

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

【讨论】:

【参考方案6】:

find 可以做到这一点。只需添加-delete

find . -name ".DS_Store" -delete

【讨论】:

您需要将文件名的大小写固定为".DS_Store",如果使用".DS_STORE",它将不起作用,因为文件名区分大小写。 @AmrLotfy 这不是真的,默认的mac文件系统是不区分大小写的 为了格外小心,我通常会排除这样的目录:find . -name '.DS_Store' -type f -delete 我会将此行添加到我的 .bashrc_profile 中,以便在每次启动 shell 时清理文件。如何让它不那么冗长,或者完全安静? @Danijel 通常,您可以将 2>/dev/null 1>/dev/null 附加到 unix 命令以使其安静。【参考方案7】:

使用文本编辑器创建一个新文件,将以下文本复制并粘贴到其中,并以“.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

【讨论】:

【参考方案8】:

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

rm -v **/.DS_Store

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

【讨论】:

以上是关于从 Mac 上的命令行删除当前文件夹和所有子文件夹中的 .DS_STORE 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何从 oh-my-zsh 和 Mac 上的“ls”命令输出中删除文件类型分类器?

MAC终端命令行整理

Linux(Mac)下怎样用命令行删除和重命名多个文件夹下的文件

用于压缩具有特定名称的所有子文件夹的 Mac OS X 命令或脚本

Linux下,如何用命令,要求:只打包当前文件夹和所有子文件夹中的.

MAC 命令行 查看硬盘和文件夹大小