shell脚本实现查看指定目录下的所有文件或文件夹的大小
时间: 2024-04-14 09:29:12 浏览: 111
您可以使用以下shell脚本来查看指定目录下的所有文件或文件夹的大小:
```shell
#!/bin/bash
# 指定目录
directory="/path/to/directory"
# 遍历目录
for item in "$directory"/*; do
if [ -d "$item" ]; then
# 计算文件夹大小
size=$(du -sh "$item" | awk '{print $1}')
echo "文件夹: $(basename "$item") 大小: $size"
elif [ -f "$item" ]; then
# 计算文件大小
size=$(du -h "$item" | awk '{print $1}')
echo "文件: $(basename "$item") 大小: $size"
fi
done
```
请将`/path/to/directory`替换为您想要查看的目录的路径。该脚本将遍历目录中的每个项目,并使用`du`命令计算文件或文件夹的大小。对于文件夹,我们使用`du -sh`命令以人类可读的格式显示大小。对于文件,我们使用`du -h`命令以人类可读的格式显示大小。
您可以将此脚本保存为`script.sh`文件,并通过运行`bash script.sh`来执行它。
相关问题
shell脚本计算文件大小
要计算文件大小,你可以使用shell命令ls -l [文件名] | awk '{sum = $5}; END {print sum}'。这个命令会列出文件的详细信息,并通过awk命令提取出文件大小。具体的步骤如下:
1. 打开终端或命令行界面。
2. 使用cd命令进入包含文件的目录。
3. 输入ls -l [文件名],将[文件名]替换为你想要计算大小的文件名称。
4. 输入| awk '{sum = $5}; END {print sum}',这将提取文件大小并打印出来。
5. 按回车键执行命令,你将看到文件的大小以字节为单位。
请注意,如果你想要计算文件夹下所有文件的总大小,可以使用ls -l [文件夹名称] | awk '{sum = sum + $5}; END {print sum}'。这个命令会将文件夹下所有文件的大小相加,并打印出总大小。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [shell:一个根据linkMap文件计算Xcode里各个工程代码占安装包大小的工具](https://download.csdn.net/download/weixin_42131439/18263029)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [linux系统使用shell命令统计文件夹下文件数量和大小](https://blog.csdn.net/limengshi138392/article/details/129580588)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [Shell脚本获取指定目录文件大小](https://blog.csdn.net/anwh9295/article/details/119750474)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
shell 脚本 将top -d 3600的 输出定向到top.log中,当top.log的size大于10M时,写入下一个文件,当该文件夹下数量大于二时,删除日期早的,写入新文件
您可以使用以下 shell 脚本来实现此功能:
```bash
#!/bin/bash
LOG_DIR="/path/to/log/dir"
LOG_FILE_PREFIX="top"
MAX_SIZE=10485760 # 10MB
MAX_FILES=2
# Create log directory if it doesn't exist
if [ ! -d "$LOG_DIR" ]; then
mkdir -p "$LOG_DIR"
fi
# Get list of existing log files sorted by modification time
log_files=($(ls -1t "$LOG_DIR"/"$LOG_FILE_PREFIX"*.log))
# Check number of log files and delete oldest if necessary
if [ "${#log_files[@]}" -ge "$MAX_FILES" ]; then
rm "${log_files[-1]}"
fi
# Write top output to log file
while true; do
# Get current log file size
log_size=$(wc -c < "$LOG_DIR"/"$LOG_FILE_PREFIX".log)
# Check if log file has reached max size
if [ "$log_size" -ge "$MAX_SIZE" ]; then
# Generate new log file name
timestamp=$(date +"%Y%m%d%H%M%S")
new_log_file="$LOG_DIR"/"$LOG_FILE_PREFIX"_"$timestamp".log
# Rename current log file and create new one
mv "$LOG_DIR"/"$LOG_FILE_PREFIX".log "$new_log_file"
touch "$LOG_DIR"/"$LOG_FILE_PREFIX".log
fi
# Append top output to log file
top -d 3600 >> "$LOG_DIR"/"$LOG_FILE_PREFIX".log
done
```
这个脚本会在指定的日志目录下创建名为 `top.log` 的日志文件,并将 `top -d 3600` 命令的输出定向到该日志文件中。当日志文件大小超过 10MB 时,会将当前日志文件重命名为带有时间戳的文件名,并创建一个新的 `top.log` 日志文件,继续将 `top -d 3600` 命令的输出定向到新的日志文件中。最多只保留两个日志文件,如果超过两个,则会删除最早的一个。
阅读全文