Android shell脚本删除目录以外的所有文件和文件夹

时间:2012-04-03 15:50:33

标签: android sh

现在我正在使用rm -r / blaa / *来删除blaa目录中的所有文件夹和文件。我正在寻找的方法是删除blaa目录中的所有文件夹和文件,除非文件夹名为abc。

有什么想法吗?

1 个答案:

答案 0 :(得分:8)

在Linux中:

这有很多方法;但我认为最好的方法是使用“find”工具。

find ! -iname "abc" -exec rm -rf {} \;

我们可以轻松找到并删除未命名为“abc”的每个文件和文件夹。

find      - to find files
! -iname  - to filter files/folders, the "!" means not
-exec     - to execute a command on every file
rm -rf    - remove/delete files -r for folders as well and -f for force
"{} \;"   - allows the commands to be used on every file

在Android中:

由于您无法使用“rm -rf”,并且当您使用“rm -r”时,它会删除最终删除所有内容的文件夹“.”。

我猜您手机上有“root”,因为您可以使用“查找”工具。

find ! -iname "abc" | sed 1d | xargs rm -r

find      - to find files
! -iname  - to filter files/folders, the "!" means not
|         - pipe sends data to next command
sed       - replace text/output
"1d"      - removes first line when you do "find ! -iname" by itself
xargs     - runs commands after pipe
rm -r     - remove/delete files, "-r" for recursive for folders

编辑:在Android中修复并测试

您可以轻松更改此设置以满足您的需求,如果有帮助,请告诉我们!


采用的解决方案

......以及最后的结果......这对用例有用(有助于总结下面的评论):

find ! -iname "abc" -maxdepth 1 -depth -print0 | sed '$d' | xargs -0 rm -r;

注意:

  • -depth - 反转输出(因此您不要先删除子目录
  • -maxdepth 1 - 使用-depth有点空白,但是嘿...这只说当前目录的输出内容而不是sub-dirs(无论如何都被-r选项删除)
  • -print0-0 - 拆分换行而不是空格(对于名称中带空格的目录)
  • sed "$d" - 表示删除最后一行(因为它现在已经反转)。最后一行只是一段时间,其中包括将调用删除目录中的所有内容(和subs!)

我相信有人可以收紧这个问题,但它确实有效,并且是一个很好的学习操作!

再次感谢Jared Burrows(以及整个Unix社区 - 去团队!) - MindWire