shell脚本递归遍历文件
时间: 2024-03-06 12:45:17 浏览: 72
Shell脚本递归遍历文件可以使用递归函数来实现。下面是一个示例代码:
```shell
#!/bin/bash
# 定义递归函数
traverse() {
local path=$1
# 遍历当前目录下的所有文件和文件夹
for file in "$path"/*; do
if [ -d "$file" ]; then
# 如果是文件夹,则递归调用traverse函数
traverse "$file"
else
# 如果是文件,则进行相应的操作,这里只是简单地打印文件路径
echo "$file"
fi
done
}
# 调用递归函数,传入要遍历的目录路径
traverse "/path/to/directory"
```
上述代码定义了一个名为`traverse`的递归函数,该函数接受一个参数`path`表示要遍历的目录路径。在函数内部,使用`for`循环遍历当前目录下的所有文件和文件夹。如果遍历到的是文件夹,则递归调用`traverse`函数;如果遍历到的是文件,则进行相应的操作,这里只是简单地打印文件路径。
你可以将`/path/to/directory`替换为你要遍历的目录路径。运行该脚本后,它将递归地遍历指定目录下的所有文件,并打印出文件路径。
相关问题
shell脚本实现遍历某个目录,筛选出小于10T的文件夹和文件,然后删除筛选结果
可以使用以下脚本实现:
```bash
#!/bin/bash
# 遍历目录
for file in /path/to/directory/*; do
# 判断是否为目录或文件
if [[ -d "$file" ]] || [[ -f "$file" ]]; then
# 获取文件大小
size=$(du -s "$file" | awk '{print $1}')
# 判断文件大小是否小于10T
if [[ "$size" -lt 100000000000 ]]; then
# 删除文件或目录
rm -rf "$file"
fi
fi
done
```
其中 `du -s` 命令可以获取目录或文件的大小,单位为字节。然后将其转换为 T 单位,判断大小是否小于 10T,如果是则删除。注意在删除时使用了 `-rf` 参数,可以递归地删除目录及其下的所有内容。
shell脚本实现遍历某个目录下所有的目录和子目录下的文件和文件夹,筛选出小于10T的文件夹和文件,然后删除筛选结果
可以使用以下脚本实现:
```bash
#!/bin/bash
# 定义函数,递归遍历目录和子目录下的文件和文件夹
function traverse() {
for file in `ls $1`
do
if [ -d "$1/$file" ] # 如果是目录,递归遍历
then
traverse "$1/$file"
else
size=`du -sk "$1/$file" | awk '{print $1}'` # 获取文件大小
if [ $size -lt 10240 ] # 如果小于10T,删除文件
then
rm -rf "$1/$file"
echo "删除文件:$1/$file"
fi
fi
done
}
# 调用函数,传入目录路径
traverse "/path/to/directory"
```
其中,`du -sk` 命令用于获取文件或文件夹的大小(单位为KB),`awk '{print $1}'` 用于提取出大小值(去掉单位)。`-lt` 表示小于,`10240` 表示10T的大小(单位为KB)。`rm -rf` 命令用于删除文件或文件夹。
阅读全文