有没有人有解决方案来删除那些讨厌的._和.DS_Store文件后,将文件从Mac移动到Linux服务器?Bash:递归删除文件
指定一个启动目录并让它启动?喜欢的/ var/www/html等/向下...
有没有人有解决方案来删除那些讨厌的._和.DS_Store文件后,将文件从Mac移动到Linux服务器?Bash:递归删除文件
指定一个启动目录并让它启动?喜欢的/ var/www/html等/向下...
cd /var/www/html && find . -name '.DS_Store' -print0 | xargs -0 rm
cd /var/www/html && find . -name '._*' -print0 | xargs -0 rm
我更喜欢这个更好的只是因为“rm”没有“-r”,这对于这个特定的任务是不必要的。 – lotsoffreetime 2011-08-17 08:44:23
find . -name "FILE-TO-FIND"-exec rm -rf {} \;
对每个找到的文件使用exec并不快。打印出来然后用xargs调用rm会更快。 – 2010-01-06 22:38:02
但是,如果你有一个'find'支持它,'+'是类似于xargs的:'find。 -name“FILE-TO-FIND”-exec rm -rf {} +' - (同样,你在'-exec'之前缺少一个空格) – 2010-01-07 02:38:28
我们在我的日子里从来没有过xargs。我们不得不步行去学校,上山两路....... – 2012-07-07 01:02:26
文件的目录,并使用:
find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf
没有测试,试戴没有xargs的第一!
您可以使用目录替换查找后的时间段,而不是首先更改为目录。
find /dir/here ...
我知道他的问题没有要求它,但我永远不会记得:你的例子处理空格的文件名? – Grundlefleck 2010-01-06 22:41:58
是的,这就是printar和-0到xargs的用途。通常它不会正确处理空格,但是使用print0它将在行的末尾打印一个空字符的文件名,然后带-0的xarg将用于将完整路径传递给xargs,而不会有空白正在使用rm命令的第二个或第三个参数,这可能非常糟糕! – 2010-01-06 22:47:11
@ X-Istence - 这不会递归地遍历子目录,但对吗? – 2010-01-06 22:52:41
您可以切换到zsh而不是bash。这允许您使用**在目录树中的任意位置相匹配的文件:
$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store
您也可以将它们组合起来像这样:
$ rm /var/www/html/**/(_*|.DS_Store)
岩组有很多是bash的缺乏等特点,但一个一个人值得为之转换。它可用于大多数(可能所有)Linux发行版以及cygwin和OS X.
您可以在zsh site找到更多的信息。
可能存在的问题:由于您不使用xargs,因此您可能会遇到命令行参数长度限制。另外,Bash4也支持'**':-)(虽然不是默认情况下,需要设置'shop-globstar') – ephemient 2010-01-06 23:26:22
简单的命令:
rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf
祝你好运!
这个伟大的工程。但谨慎的说法是,我只是使用了'rm -i'find ./ -name'* py'' -rf',它并没有提示我删除文件。你需要把它放在最后(即'-rfi')。感谢上帝为我的备份脚本。 – ryanjdillon 2013-04-24 19:11:40
如果有太多的文件,这打破了错误:'-bash:/斌/ RM:参数列表太long' – Viktor 2014-06-25 10:46:55
较新的findutils支持-delete,所以:
find . -name ".DS_Store" -delete
会为你工作,如果你有一个上最新的POSIX系统,我相信。至少它适用于我在OS X 10.8上,
在@ X-Istence的帖子的评论中认为@ephemient(认为它足够有用以保证它自己的答案)。
需要注意的几件事:
'-delete'不是递归的。因此,如果.TemporaryItems(文件夹)中包含文件,该命令将失败。
有很多通过MACS创建这些讨厌的文件: .DS_Store ._ DS_Store .TemporaryItems .apdisk
这一个命令的地址全部。节省运行查找一遍又一遍多个匹配。
find /home/foo \(-name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;
删除“拇指”的示例。DB”递归;
find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf
验证通过:
find . -iname "Thumbs.db"
这应该现在,不显示任何与项目的 “Thumbs.db” 这个,当前路径内
这是更好。通过加入-print来查看要删除的内容-print this answer
find /var/www/html \(-name '.DS_Store' -or -name '._*' \) -delete -print
虽然它不是重复的IMO,但应该带al ook在这:http://stackoverflow.com/questions/1280429/delete-all-files-but-keep-all-directories-in-a-bash-script – Grundlefleck 2010-01-06 22:36:54
虽然不是你在问什么。我会认为这是一个更好的解决方案:http://unix.stackexchange.com/questions/9665/create-tar-archive-of-a-directory-except-for-hidden-files – Viktor 2014-06-25 10:38:39