【问题标题】:deleting the files thru shell通过shell删除文件
【发布时间】:2012-06-08 18:30:35
【问题描述】:

我是 shell 编程的新手。 基本上,我编写了一个小脚本,它在执行时会清除该特定文件夹中的某些文件类型:

#!/bin/bash
echo "cleaning temp extensions "
find -type f -name '*.pyc' -exec rm -f {} ';' 
find -type f -name '.*.swp' -exec rm -f {} ';'
find -type f -name '*~' -exec rm -f {} ';'
echo "files cleaned!!"

但是现在,我想清除该 shell 脚本所在文件夹中的所有文件。

例如,如果我有类似的东西

 folderA/  folderB/ folderC/   clean.sh

当我运行这个 clean.sh 时,它会删除文件夹 A、文件夹 B 和文件夹 C 中的所有文件类型 我应该在这个脚本中进行哪些修改? 谢谢。

【问题讨论】:

  • 致投票给“关闭”的人。你能告诉我这是怎么回事吗。看看旁边的相关答案吧。
  • 这似乎与我期望“超级用户”能够做的事情更相关。这不是个人的,也没有被否决。这只是熟悉常见的 shell 工具。现在,如果这个问题正在讨论循环或递归调用的一些 bash 语法......更多“编程”。
  • @pst:很酷。感谢您的提示:)

标签: shell unix


【解决方案1】:

您可以像这样将所有 3 个查找命令合并为一个:

find -type f \( -name '*.pyc' -o -name '.*.swp' -o -name '*~' \) -exec rm -f {} \;

现在在一个文件夹中执行这个 findA 使用:

find folderA/ -type f \( -name '*.pyc' -o -name '.*.swp' -o -name '*~' \) -exec rm -f {} \;

【讨论】:

    【解决方案2】:

    您的要求并不完全清楚。

    删除当前目录中的所有文件:

    find . -maxdepth 1 -type -f -delete
    

    删除当前目录下的所有文件及其下的所有目录:

    find . -type -f -delete
    

    删除当前目录下的所有文件和目录:

    find . -delete
    

    如果您真的想删除“此 shell 脚本所在文件夹中的所有文件”,那真是太疯狂了。为什么要将脚本复制到目录中以删除该目录中的文件?如果您的意思是“我无法删除指定目录中具有指定扩展名的文件”,那么它的工作方式如下:

    #!/usr/bin/env bash
    
    find "$@" -type f \( -name '*.pyc' -o -name '*.swp' -o -name '*.~' \) -delete
    

    并将其保存到 PATH 中的目录(例如 /usr/local/bin),然后您可以说:

    clean.sh folderA folderB folderC
    

    或者任何你想要的。

    【讨论】:

      【解决方案3】:

      要删除所有文件,请删除 -name ... 过滤器:

      find -type f -exec rm -f {} ';'
      

      明显的警告:小心。

      【讨论】:

        猜你喜欢
        • 2011-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-11
        • 1970-01-01
        相关资源
        最近更新 更多