LIST_FILE_OR_DIR_SIZE() { dir_path=$1 file_list=$(ls ${dir_path}) for file in ${file_list}; do if [ -d ${dir_path}"/"$file ]; then #注意此处之间一定要加上空格,否则会报错 LOG $(du -sh ${dir_path}"/"$file) else LOG $(ls -lh ${dir_path}"/"$file | awk '{print $5 $9}') fi done } 上述的函数如何调用
时间: 2023-08-13 12:05:40 浏览: 79
要调用上述函数,你可以按照以下步骤进行:
1. 将给定函数添加到你的shell脚本文件中。
2. 在需要调用函数的地方使用`LIST_FILE_OR_DIR_SIZE 目录路径`的格式来调用函数。
下面是一个示例:
```shell
#!/bin/bash
# 定义函数
LIST_FILE_OR_DIR_SIZE() {
dir_path=$1
file_list=$(ls ${dir_path})
for file in ${file_list}; do
if [ -d ${dir_path}"/"$file ]; then
echo $(du -sh ${dir_path}"/"$file)
else
echo $(ls -lh ${dir_path}"/"$file | awk '{print $5 $9}')
fi
done
}
# 调用函数
LIST_FILE_OR_DIR_SIZE "/path/to/directory"
```
在上述示例中,将`/path/to/directory`替换为你想要查看的目录路径。当你运行脚本时,将会调用`LIST_FILE_OR_DIR_SIZE`函数并传递目录路径作为参数,从而输出目录中文件和文件夹的大小信息。
相关问题
linux shell 监控 以下目录,一个小时内文件的个数,小于1,发出返回值,$SETTLE_DATA/databackup/ctjs/H_CC08_LS $SETTLE_DATA/databackup/cdma/cctjs/ZX $SETTLE_DATA/databackup/cdma/cctjs/HW $SETTLE_DATA/databackup/IMS/SJZ $SETTLE_DATA/databackup/IMS/LF $SETTLE_DATA/databackup/ts/ngn_bak1 $SETTLE_DATA/databackup/in/17901_bak1 $SETTLE_DATA/databackup/in/4008_bak1 $SETTLE_DATA/databackup/in/smp_bak1 $SETTLE_DATA/databackup/intcdr/inter_jt_bak1 $SETTLE_DATA/databackup/cdma/htsms $SETTLE_DATA/databackup/caiE_bak1_bak1 $SETTLE_DATA/databackup/roam/prov_roam_bak1 $SETTLE_DATA/databackup/roam/inter_roam_bak1 $SETTLE_DATA/databackup/roam/prov_gprs_bak1 $SETTLE_DATA/databackup/cdma/voice $SETTLE_DATA/databackup/cdma/hwcdma $SETTLE_DATA/databackup/roam/prov_SA_gprs_bak1 $SETTLE_DATA/databackup/ims
您可以使用以下脚本来监控以上目录中一个小时内文件的个数是否小于1:
```
#!/bin/bash
# 监控目录列表
dir_list=("$SETTLE_DATA/databackup/ctjs/H_CC08_LS" "$SETTLE_DATA/databackup/cdma/cctjs/ZX" "$SETTLE_DATA/databackup/cdma/cctjs/HW" "$SETTLE_DATA/databackup/IMS/SJZ" "$SETTLE_DATA/databackup/IMS/LF" "$SETTLE_DATA/databackup/ts/ngn_bak1" "$SETTLE_DATA/databackup/in/17901_bak1" "$SETTLE_DATA/databackup/in/4008_bak1" "$SETTLE_DATA/databackup/in/smp_bak1" "$SETTLE_DATA/databackup/intcdr/inter_jt_bak1" "$SETTLE_DATA/databackup/cdma/htsms" "$SETTLE_DATA/databackup/caiE_bak1_bak1" "$SETTLE_DATA/databackup/roam/prov_roam_bak1" "$SETTLE_DATA/databackup/roam/inter_roam_bak1" "$SETTLE_DATA/databackup/roam/prov_gprs_bak1" "$SETTLE_DATA/databackup/cdma/voice" "$SETTLE_DATA/databackup/cdma/hwcdma" "$SETTLE_DATA/databackup/roam/prov_SA_gprs_bak1" "$SETTLE_DATA/databackup/ims")
# 获取当前时间
current_time=$(date +%s)
# 遍历目录列表
for dir in "${dir_list[@]}"
do
# 计算一个小时前的时间
last_hour=$((current_time-3600))
# 获取目录中最后修改时间在一个小时之内的文件个数
file_count=$(find "$dir" -type f -newermt @"$last_hour" | wc -l)
# 判断文件个数是否小于1
if [ "$file_count" -lt 1 ]; then
echo "目录 $dir 中一个小时内文件个数小于1"
exit 1
fi
done
echo "所有目录中一个小时内文件个数均不小于1"
exit 0
```
您可以将以上脚本保存为一个文件,例如 `check_file_count.sh`,然后将其添加到 crontab 中,每小时执行一次,如下所示:
```
0 * * * * /path/to/check_file_count.sh >/dev/null 2>&1
```
这将会在每个小时的第 0 分钟执行 `check_file_count.sh` 脚本,并将输出重定向到 `/dev/null`,以防止出现不必要的邮件通知。如果脚本检测到一个小时内文件个数小于1,则会以非零状态码退出,crontab 会将其视为任务执行失败并发送邮件通知。
考试 现有程序:在命令行中用“ ls_hdfs /user ”命令实现对HDFS文件系统中目录“ /user ”下的文件的文件名、文件块的大小、文件内容长度打印显示,如下图:请填空,实现全部程序功能。 (图像) public class ls_hdfs { static FileSystem fs = null; //连接文件系统 static void init() throws Exception { // 构造一个配置参数对象,设置一个参数:我们要访问的hdfs的URI Configuration conf = new Configuration(); // 指定HDFS文件系统的namenode节点为:192.168.121.134,服务端口为:9000 空1:_________________________________ // 设置客户端身份为:root System.setProperty("HADOOP_USER_NAME", "root"); // 通过FileSystem的静态方法获取文件系统客户端对象 空2:_________________________________ } //显示文件列表 static void ListFiles(String dir) throws FileNotFoundException, IllegalArgumentException, IOException { // 获取迭代器对象 while (fileList.hasNext()) { LocatedFileStatus fileStatus = fileList.next(); // 打印当前文件名 String fileName=fileStatus.getPath().getName(); 空4:_________________________________ // 打印当前文件块大小 空5:_________________________________ System.out.println(fileBlock); // 打印当前文件内容长度 Long fileLong=fileStatus.getLen(); System.out.println(fileLong); } //关闭文件系统 空6:_________________________________ } public static void main(String[] args) throws Exception { //连接HDFS init(); //显示文件列表 空7:_________________________________ } }
空1:conf.set("fs.defaultFS", "hdfs://192.168.121.134:9000");
空2:fs = FileSystem.get(new URI("hdfs://192.168.121.134:9000"), new Configuration());
空4:BlockLocation[] blocks = fileStatus.getBlockLocations(); String fileBlock = ""; for(BlockLocation block : blocks) { fileBlock += block.getLength() + " "; }
空5:String fileBlock = ""; for(BlockLocation block : blocks) { fileBlock += block.getLength() + " "; }
空6:fs.close();
空7:RemoteIterator<LocatedFileStatus> fileList = fs.listFiles(new Path(dir), true); ListFiles(dir);
阅读全文