shell求出某文件夹下所有后缀为.sh文件的总大小
时间: 2024-03-24 22:36:01 浏览: 68
可以使用`du`命令配合`grep`命令来实现:
```
du -ch /path/to/folder/*.sh | grep total$
```
其中:
- `du -ch /path/to/folder/*.sh`:统计指定目录下所有后缀为`.sh`文件的大小,并以人类可读的方式输出。
- `grep total$`:过滤出总大小,只显示最后一行以`total`结尾的行。
执行上述命令后,即可输出指定目录下所有后缀为`.sh`文件的总大小。
相关问题
编写一个 Shell 脚本,接受一个目录作为参数,递归遍历该目录下的所有文件以及子文件夹,统计输出.log文件与.txt文件数量、及相关文件路径
你可以使用以下的shell脚本来接受一个目录作为参数,递归遍历该目录下的所有文件和子文件夹,并统计输出.log文件和.txt文件的数量以及相关文件的路径:
```shell
#!/bin/bash
directory=$1
log_count=0
txt_count=0
function count_files() {
local dir=$1
# 遍历目录中的文件和文件夹
for file in "$dir"/*; do
if [[ -f "$file" ]]; then
# 如果是.log文件
if [[ "$file" == *.log ]]; then
((log_count++))
echo "Log 文件路径: $file"
fi
# 如果是.txt文件
if [[ "$file" == *.txt ]]; then
((txt_count++))
echo "Txt 文件路径: $file"
fi
elif [[ -d "$file" ]]; then
# 递归处理子文件夹
count_files "$file"
fi
done
}
count_files "$directory"
echo "Log 文件数量: $log_count"
echo "Txt 文件数量: $txt_count"
```
这个脚本首先将传递给脚本的第一个参数(即目录路径)保存到`directory`变量中。然后定义了一个名为`count_files`的函数,用于递归遍历目录及其子目录中的所有文件和文件夹。
在`count_files`函数中,首先使用`for`循环遍历目录中的所有文件和文件夹。如果当前项是一个文件(使用`-f`判断),则判断文件的后缀名是`.log`还是`.txt`,并分别对计数变量进行递增操作,并输出文件路径。如果当前项是一个文件夹(使用`-d`判断),则递归调用`count_files`函数处理该子文件夹。
最后,在主函数中调用`count_files`函数,传递目录路径作为参数,进行遍历。
你可以将这个脚本保存为一个.sh文件,然后在终端中运行该脚本并指定目录路径作为参数,脚本将输出.log文件和.txt文件的数量,并输出相关文件的路径。例如,假设脚本名为`count_files.sh`,你可以运行以下命令:
```shell
bash count_files.sh /path/to/directory
```
其中`/path/to/directory`是你要统计的目录的实际路径。脚本会输出.log文件和.txt文件的数量,并列出相关文件的路径。
在mac系统里遍历文件夹内所有文件,修改文件后缀名DCM为dcm
在Mac系统中,你可以使用shell脚本来遍历指定文件夹内的所有文件,并批量替换文件后缀名。以下是一个简单的bash命令行示例:
```sh
find /path/to/your/folder -exec rename 's/\(.*\)DCM$/\1dcm/' {} \;
```
解释一下这个脚本:
1. `find` 命令用于查找文件,`/path/to/your/folder` 替换为你想要操作的实际文件夹路径。
2. `-name "*.DCM"` 指定只查找名字以".DCM"结尾的文件。
3. `-type f` 确保找到的是普通文件,而不是目录或其他类型的文件。
4. `-exec rename` 后跟一个执行的命令,`s` 表示替换,`\(.*\)DCM$` 匹配任何以 ".DCM" 结尾的部分,`\1dcm` 是替换后的结果,即去掉".DCM"并添加"dcm"。
5. `{}` 是 find 命令找到的每个文件,`\;` 结束执行命令。
执行此命令前,建议先备份重要的文件,因为这个操作是不可逆的。如果你不确定,可以在不加 `-exec` 参数的情况下预览改动。另外,记得用绝对路径或相对路径替换 `/path/to/your/folder`。
阅读全文