如何递归循环遍历目录以删除特定扩展名的文件

12 浏览
0 Comments

如何递归循环遍历目录以删除特定扩展名的文件

我需要递归遍历一个目录,并删除所有扩展名为.pdf.doc的文件。我成功地递归遍历了一个目录,但无法过滤上述文件扩展名的文件。

目前我的代码如下:

#/bin/sh
SEARCH_FOLDER="/tmp/*"
for f in $SEARCH_FOLDER
do
    if [ -d "$f" ]
    then
        for ff in $f/*
        do      
            echo "Processing $ff"
        done
    else
        echo "Processing file $f"
    fi
done

我需要帮助完成代码,因为我没有取得任何进展。

0
0 Comments

问题的出现原因是需要递归遍历一个目录,并删除特定扩展名的文件。文章提供了多种解决方法。

第一种解决方法是使用for循环来遍历目录,并删除文件。这种方法简单直接,但在处理文件名中包含空格和通配符字符时会出错。

第二种解决方法是在第一种方法的基础上添加临时设置IFS和禁用通配符扩展来解决空格和通配符字符的问题。

第三种解决方法是使用xargs来处理具有特殊字符的文件名,这种方法适用于包含换行符的文件名。

第四种解决方法是使用GNU和*BSD find的-delete操作,这种方法可以直接删除文件,但在文件名中包含空格时会出错。

最后,文章提到了一个关于为什么不使用find的-delete标志的讨论,并提供了相关链接进行了解。

文章介绍了四种解决方法,分别是使用for循环、临时设置IFS和禁用通配符扩展、使用xargs和使用find的-delete标志。这些方法可以帮助读者递归遍历目录并删除特定扩展名的文件。

0
0 Comments

如何循环递归地遍历目录以删除特定扩展名的文件

在没有使用`find`命令的情况下,可以使用bash脚本来循环遍历目录并删除特定扩展名的文件。以下是一个示例代码:

shopt -s globstar
for f in /tmp/*.pdf /tmp/*.doc tmp/**/*.pdf tmp/**/*.doc ; do
  rm "$f"
done

这段代码的作用是递归地遍历`/tmp`目录下的所有`.pdf`和`.doc`文件,并删除它们。需要注意的是,这段代码要求使用bash版本大于等于4.0,并且需要启用`globstar`选项。

如果要处理包含空格的文件名,这种方法也适用于OSX系统。

值得注意的是,`globstar`选项仅在Bash 4.0或更高版本中可用,而不是许多机器上的默认版本。

此外,如果希望查找隐藏文件,可以使用`shopt -s dotglob`命令。另外,如果存在一个扩展名为空的空目录,上述命令也会将其删除,可以通过添加判断条件`[[ -f $f ]] && rm "$f"`来避免这种情况。

需要注意的是,`**`在POSIX的`sh`中不可用,因此这段代码只适用于Bash或其他扩展的shell。

根据反馈,上述代码可能会漏掉隐藏文件夹和多层嵌套的文件夹。可以通过修改代码来解决这个问题。

文章来源:https://stackoverflow.com/questions/11912459

0
0 Comments

如何递归循环遍历目录以删除特定扩展名的文件

在这个问题中,用户想要找到一种方法来递归地遍历目录并删除特定扩展名的文件。用户提到了使用find命令的方法,并给出了一个示例命令find /tmp -name '*.pdf' -or -name '*.doc' | xargs rm,以及使用-delete选项的方法。

另一位用户指出,为了避免文件名中包含换行符而导致的问题,应该始终使用find ... -print0 | xargs -0 ...,而不是直接使用find | xargs

然而,另一位用户认为使用没有任何选项的xargs几乎总是不好的建议,应该使用find ... -exec代替。

然后,用户'SO-stopbeingevil'问为什么xargs是不好的建议。

用户'äck'解释说,xargs期望的输入语法并不是find(或任何其他常见命令)的输出语法。因此,使用xargs可能会导致问题。

另一位用户询问是否可以在找到的文件上使用sed命令。

最后,用户提到使用-delete -print选项可以使find在删除文件时打印文件名。

用户想要找到一种递归循环遍历目录并删除特定扩展名文件的方法。他们提到了使用find命令和xargs命令的方法,以及一些注意事项。

0