首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

shell脚本以递归方式遍历文件

递归是一种编程技巧,它允许一个函数或方法调用自身来解决问题。在这个问题中,我们需要使用递归来遍历文件夹和其中的文件。

在Shell脚本中,我们可以使用find命令来递归地遍历文件夹。以下是一个示例脚本,它将递归地遍历当前目录下的所有文件,并输出它们的路径:

代码语言:bash
复制
#!/bin/bash

# 定义一个递归函数来遍历文件夹
function traverse() {
  for file in "$1"/*; do
    if [ -d "$file" ]; then
      # 如果是文件夹,则递归调用traverse函数
      traverse "$file"
    else
      # 如果是文件,则输出文件路径
      echo "$file"
    fi
  done
}

# 调用traverse函数,传入当前目录作为参数
traverse "."

这个脚本定义了一个名为traverse的函数,它接受一个参数,即要遍历的文件夹路径。在函数内部,我们使用for循环遍历文件夹中的所有文件。如果文件是一个文件夹,我们递归调用traverse函数,否则我们输出文件的路径。最后,我们调用traverse函数,传入当前目录(.)作为参数。

这个脚本可以用来递归地遍历文件夹和其中的文件,并输出它们的路径。你可以根据需要修改这个脚本,以满足你的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 使用 Python 实现文件递归遍历

    今天有个脚本需要遍历获取某指定文件夹下面的所有文件,我记得很早前也实现过文件遍历和目录遍历的功能,于是找来看一看,嘿,不看不知道,看了吓一跳,原来之前我竟然用了这么搓的实现。...先发出来看看: def getallfiles(dir): """遍历获取指定文件夹下面所有文件""" if os.path.isdir(dir): filelist = os.listdir...if os.path.isfile(filename): print filename def getalldirfiles(dir, basedir): """遍历获取所有子文件夹下面所有文件...有木有更好的方式呢?网上一搜一大把,原来有一个现成的 os.walk() 函数可以用来处理文件(夹)的遍历,这样优化下就更简单了。...,而 walk 则是先输出顶级文件夹,然后是顶级文件,再输出第二级文件夹,以及第二级文件,以此类推,具体大家可以把上面脚本拷贝后自行验证。

    2.4K20

    递归方式实现二叉树后序遍历_二叉树递归遍历

    上图是一棵二叉树,前序遍历结果:1 2 4 5 3 6 咦,我想你可能会疑惑什么叫做前序遍历,其实很简单,就是按照 根 -》 左 -》 右 的方式遍历二叉树。...首先让我们来看看如何递归的去前序遍历二叉树 注:在这里我特别强调一点,在我们二叉树中,如果采用递归方式,大部分都采用的根左右的方式,即采用子问题的方式,即先处理跟节点,再处理左子树,再处理右子树的这样一种思想...前序递归遍历 /** * Definition for a binary tree node...那么接下来我们再看看非递归方式 前序非递归遍历 /** * Definition for a binary tree node....s.top(); s.pop(); cur=top->right; } return v; } }; 这就是前序遍历的非递归方式

    41110

    Python递归遍历文件夹搜索文件 脚本MagicSearch.py

    ,并且不存在于notSearhFolderArr数组中, 获取文件夹下的所有文件文件夹, 遍历,判断子元素是文件,并且文件类型存在于searchTypeArr,如果真则存在返回路径 判断子元素...,是文件夹并且不属于notSearhFolderArr数组中, 执行第一步,进行递归搜索 代码: # 根据配置好的文件,搜索文件夹 import os import io import sys sys.stdout...fileArr = os.listdir(folderPath) # 获取文件夹下的所有内容(文件文件夹) for item in fileArr: currentPath...innerFileArr = searchFolder(currentPath) # 递归搜索 searFilePathArr.extend(innerFileArr)...extend: 向数组追加一个数组 运行结果: 程序返回的事根目录下所有的pdf文件路径列表 这个脚本稍作修改就可以查询多个文件类型,对文件进行分类,获取要查询的文件路径后,还可以对文件进行批量备份到一个文件夹下

    1.3K10

    文件IO】实现:查找文件并删除、文件复制、递归遍历目录查找文件

    一、文件查找并删除 扫描指定⽬录,并找到名称中包含指定字符的所有普通⽂件(不包含⽬录),并且后续询问⽤⼾是否 要删除该⽂件 一个主要的操作就是需要扫描指定目录(递归递归函数 首先判断是否是目录,若不是...,直接返回 若是,则列出当前目录的文件名,放到 files 数组中 如果 files 是空的,或者 files 数组长度为 0,代表没有文件,则直接返回 循环遍历 files 数组 若此时遍历到的文件是普通文件...调用删除文件方法 doDelete 若磁石遍历到的仍是目录 继续递归 public class Demo15 { //递归目录的方法 private static...若直接写入 buffer,就把没有用到的空间也写入了,不太合适 也许 buffer 只填了 100 个空间,剩下 924 个空间都是 0,写入就没有意义 此时我们就需要指定空间写入[0, n] 三、递归遍历目录查找文件...“遍历文件方式实现 其中最核心的优化,是引入了神奇的数据结构——倒排索引 提前把所有的文件,里面的内容都分析好,分析出一个文件中,包含哪些词,再基于这个结果,得到另一份数据,每个词都在哪些文件中包含着

    8910

    最简方式实现二叉树的非递归遍历

    思维导图: 思路分析: 要实现二叉树的非递归遍历,就必须要借助栈的结构特点来实现; 我们根据遍历的顺序,然后对入栈的结点进行分析遍历即可; 代码实现: 就以这个二叉树为例吧!...//二叉树先序遍历(非递归) public void XBTNotRecursion(BinaryTreeNode root){ BinaryTreeNode temp = root...; //二叉树中序遍历(非递归) public void ZBTNotRecursion(BinaryTreeNode root){ BinaryTreeNode temp =...temp = temp.rchild; } } } 3,后序遍历; 后序遍历的非递归算法是三种顺序中最复杂的,原因在于: 1,后序遍历是先访问左、右子树...//二叉树后序遍历(非递归) public void HBTNotRecursion(BinaryTreeNode root){ BinaryTreeNode temp = root

    83220

    二叉树的运用(递归)(遍历方式)(简洁.含代码,习题)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 一、前,中,后序——三种遍历方式 1:前,中,后序遍历 访问方向图示:(后续解题思路) 2.原理图示:(递归) ps:以中序遍历为例...,将二叉树遍历完。...代码实现: 三、递归思想在二叉树中的实际应用 1.求二叉树的结点个数:这里不对TreeSize返回值做保存的原因是,返回值不用于判断 int TreeSize(BTNode* root) { return...0 : TreeSize(root->left) + TreeSize(root->right) + 1; } 2.求二叉树的高度:注意要保存递归回来的返回值再做判断,避免进行下一步递归时返回找上一步递归的值...1.深度优先遍历 2.广度优先遍历

    13910

    使用Shell脚本遍历子目录下所有文件的方法

    最近博客进行了搬家,CDN源发生改变,想着在CDN上将博客所有图片刷新预热一遍,那么问题来了,刷新预热需要得到所有图片地址,于是直接使用Shell脚本递归遍历wp-content/uploads目录先得到图片文件路径...创建Shell脚本 使用vi编辑器,先创建一个vi traveDir.sh文件,复制下面的脚本代码: #!...if [ -d $1"/"$file ] #注意此处之间一定要加上空格,否则会报错 then read_dir $1"/"$file else echo $1"/"$file #在此处处理文件即可.../traveDir.sh /xxx/wp-content >> 1.txt 后续操作 导出的文件路径可能是/data/wwwroot/xiaoz.me/wp-content/uploads//2019/...总结 脚本批量导出文件路径 文本工具将站点根目录批量替换为自己的域名 提交URL刷新 脚本比较简单,网上一搜一大把,此文参考了:使用Shell遍历目录及其子目录中的所有文件方法

    1.6K20

    C#如何遍历某个文件夹中的所有子文件和子文件夹(循环递归遍历多层),得到所有的文件名,存储在数组列表中

    首先是有一个已知的路径,现在要遍历该路径下的所有文件文件夹,因此定义了一个列表,用于存放遍历到的文件名。...递归遍历如下:将已知路径和列表数组作为参数传递, public void Director(string dir,List list) { DirectoryInfo d...d.GetDirectories();//文件夹 foreach (FileInfo f in files) { list.Add(f.Name);//添加文件名到列表中...} //获取子文件夹内的文件列表,递归遍历 foreach (DirectoryInfo dd in directs) {...Director(dd.FullName, list); } } 这样就得到了一个列表,其中存储了所有的文件名,如果要对某一个文件进行操作,可以循环查找: foreach (string

    14.1K40

    精心构造的PS1文件名导致Powershell命令执行

    \calc;1.ps1”则可以用来执行calc.exe,如果使用标准调用了该脚本Windows外壳程序“ cmd.exe”和“ calc.exe”与ps1本位于同一目录中。如下图所示: ?...但是,如果这些脚本是从PowerShells Shell运行的而不是“ cmd.exe”,则“&”(调用运算符)将阻止我们的漏洞利用。...不过,如果用户启用了“ .ps1”脚本以将PowerShell作为默认程序打开,则只需双击该文件即可触发漏洞利用。“&”呼叫运算符将不再起效果。...另外,如果用户尚未启用PowerShell来打开.ps1本, ?...默认情况下 然后从cmd.exe运行脚本,例如: c:\>powershell "\Hello;World.ps1" 也可以直接运行,而无需放入PowerShell shell

    1.9K20

    几个shell编程的小例子

    1 遍历文件系统可以使用Shell脚本中的循环结构和相关的命令来完成。下面是一个简单的例子,展示如何使用Shell脚本来完成一次文件系统的遍历。#!...}s%s\n" "" "$item" # 如果当前路径是一个目录,则递归调用traverse函数来遍历子目录 if [[ -d "$fullpath" ]] then #...递归调用traverse函数,并增加缩进级别 traverse "$fullpath" $((indent+2)) fi done}# 调用traverse函数,并传入待遍历的路径作为参数...subdirectory1 file3.txt subdirectory2directory2 file4.txt在上面的例子中,我们先定义了一个名为traverse的函数,用于递归遍历文件和目录...我们使用ls命令获取指定路径下的所有文件和目录,并在循环中处理每一个文件和目录。如果某个文件是一个目录,则会递归调用traverse函数来遍历子目录。

    27962

    【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 逐行遍历文件文本数据 | 获取文件中的文本行 | 查询文本行数据 | 追加文件数据 | 使用占位符方式拼接字符串 )

    文章目录 一、逐行遍历文件文本数据 1、获取文件中的文本行 2、查询文本行数据 3、追加文件数据 4、使用占位符方式拼接字符串 二、完整代码示例 一、逐行遍历文件文本数据 ---- 1、获取文件中的文本行...调用 fgets 方法 , 从文件中 , 获取一行数据 , 写出到指定的 数组 或 内存空间 中 ; // 获取 fp 文件的一行数据 , 保存到 line_buffer 数组中 ,...NULL) { strcat(file_buffer, line_buffer); continue; } 4、使用占位符方式拼接字符串...调用 sprintf 可以使用占位符方式拼接字符串 , 这里将键值对按照 "%s = %s\n" 形式 , 拼接成字符串 , 然后将拼接后的字符串追加到另外一个数组中 ; //...追加拷贝到 file_buffer 数组中 strcat(file_buffer, line_buffer); 二、完整代码示例 ---- 完整代码示例 : // 逐行遍历配置文件

    1.5K40

    2020-09_Shell 编程笔记

    简单和复杂的两个 shell 脚本。 范例 1. 清除/var/log 下的 message 日志文件的简单命令脚本。 # 把所有命令放在一个文件堆积起来就形成了脚本。...(4) 脚本以.sh为扩展名 (5) 代码书写习惯优秀 I....位置变量 0 获取当前执行的 shell 脚本的文件名,包括脚本路径,如 dirname 0 # 文件路径 basename n 获 取 当 前 执 行 的 s h e l l 本 的 第 n...个 参 数 值 , n = 1..9 , 当 n 为 0 时 表 示 本 的 文 件 名 , 如 果 n 大 于 9 , 则 n 获取当前执行的 shell 脚本的第 n 个参数值,n=1..9,...当 n 为 0 时表示脚本的文件名,如果n 大于9,则 n获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9,则{10} $# 获取当前 shell 脚本命令行中参数的总个数

    1.4K10

    Linux 命令(80)—— chown 命令

    为默认选项 --preserve-root 不允许在根目录 /上递归操作 --reference=RFILE 使用指定的文件 RFILE 的所有者和所属用户组,而非指定值 -R --recursive...递归处理所有的文件及子目录 以下三个选项 -H、-L 和 -P 与 -R 配合使用,用于递归操作时确定遍历方式: -H 如果命令行参数是一个符号链接指向一个目录,则遍历它 -L 遍历每一个符号链接指向的目录...-P 不遍历任何符号链接。...chown root:root FILE (3)只修改文件所属组为 root。 chown :root FILE (4)递归修改所有的文件及子目录所有者和所属组为 root。...当前用户登录后所使用的 Shell,在 Centos/RHEL 系统中,默认的 Shell 是 Bash;如果不希望用户登登系统,可以通过 usermod 或者手动修改 passwd 设置,将该字段设置为

    2.8K20
    领券