2017-02-09 08:54:16 Quincuntial 阅读数 42769
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7034 人正在学习 去看看 良许

文章作者:Tyan
博客:noahsnail.com  |  CSDN  |  简书

Linux下有三个命令:lsgrepwc。通过这三个命令的组合可以统计目录下文件及文件夹的个数。

  • 统计当前目录下文件的个数(不包括目录)
$ ls -l | grep "^-" | wc -l
  • 统计当前目录下文件的个数(包括子目录)
$ ls -lR| grep "^-" | wc -l
  • 查看某目录下文件夹(目录)的个数(包括子目录)
$ ls -lR | grep "^d" | wc -l

命令解析:

  • ls -l

长列表输出该目录下文件信息(注意这里的文件是指目录、链接、设备文件等),每一行对应一个文件或目录,ls -lR是列出所有文件,包括子目录。

  • grep "^-"
    过滤ls的输出信息,只保留一般文件,只保留目录是grep "^d"

  • wc -l
    统计输出信息的行数,统计结果就是输出信息的行数,一行信息对应一个文件,所以就是文件的个数。

2015-09-18 20:29:52 SHK242673 阅读数 1534
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7034 人正在学习 去看看 良许
Linux C 计算文件夹大小数目(包括子目录、文件)

自己手工码的,并测测试可以通过。

#include   <stdio.h>
#include   <stdlib.h>
#include   <string.h>
#include   <dirent.h>
#include   <sys/stat.h>
#include   <sys/types.h>


/*
dirname: 要统计的文件夹路径
返回组: 计算的所有文件的数目(包括文件合目录)
*/
long get_file_count(char *dirname)
{
        DIR *dir;
        struct dirent *ptr;
        long total_count = 0;
        char path[PATH_MAX] = {0};

        dir = opendir(dirname);
        if(dir == NULL)
        {
                printf("%s: open dir: %s failed.\n", __func__,path);
                exit(1);
        }
        while((ptr = readdir(dir)) != NULL)
        {
                if(strcmp(ptr->d_name,".") == 0 || strcmp(ptr->d_name,"..") == 0)
                        continue;
                snprintf(path, (size_t)PATH_MAX, "%s/%s", dirname,ptr->d_name);
                if(ptr->d_type == DT_DIR)
                {
                        total_count ++;
                        //printf("%s: Entering into dir: %s.\n", __func__,path);
                        //printf("%s: Is dir, and count++, count: %ld\n", __func__, total_count);
                        total_count += get_file_count(path);
                        memset(path, 0, sizeof(path));
                }else
                {
                        //printf("%s: count: %ld, file: %s.\n", __func__,total_count,path);
                        total_count++;
                }
        }
        closedir(dir);
        //printf("%s: statistics total files count :%ld.\n", __func__,total_count);
        return total_count;
}


/*
dirname: 要统计的文件夹路径
返回组: 计算的所有文件的大小
*/
long get_file_size(char *dirname)
{
        DIR *dir;
        struct dirent *ptr;
        long total_size = 0;
        char path[PATH_MAX] = {0};

        dir = opendir(dirname);
        if(dir == NULL)
        {
                printf("%s: open dir: %s failed.\n", __func__,path);
                exit(1);
        }

        //printf("Enetering into %s.\n", __func__);
        while((ptr=readdir(dir)) != NULL)
        {
                snprintf(path, (size_t)PATH_MAX, "%s/%s", dirname,ptr->d_name);
                struct stat buf;
                if(lstat(path, &buf) < 0)
                {
                        printf("lstat %s error.\n", path);
                }
                if(strcmp(ptr->d_name,".") == 0)
                {
                        total_size += buf.st_size;
                        continue;
                }
                if(strcmp(ptr->d_name,"..") == 0)
                {
                        continue;
                }
                //printf("buf.st_size: %ld,total_size: %ld, path: %s.\n",buf.st_size, total_size,path);
                if(ptr->d_type == DT_DIR)
                {
                        //printf("Entering into dir: %s, total_size: %ld\n", path,total_size);
                        total_size += get_file_size(path);
                        //printf("Out of dir: %s, total_size: %ld\n\n", path,total_size);
                        memset(path, 0, sizeof(path));
                }else
                {
                        total_size += buf.st_size;
                }
        }
        closedir(dir);
        //printf("total files size :%ld, path: %s \n", total_size,dirname);
        //printf("End of %s\n", __func__);
        return total_size;
}

int main(void)
{
    long total_count = 0;
    long total_size = 0;

    total_count = get_file_count("./bin");
    total_size = get_file_size("./bin");
    printf("total_count:%ld, total_size:%ld\n", total_count,total_size);
    return 0;
}





2018-04-07 20:54:52 xf3656910 阅读数 508
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7034 人正在学习 去看看 良许

    用过Linux操作系统的人,都知道有du这么一个命令,可以很方便的列出当前文件夹内子目录及子文件的大小。

    然而在Windows系统,则无类似工具,若需查看某文件夹下哪个子文件夹最大,包含文件最多,着实是一件头疼的事。不借助工具恐怕只能右击一个个的子文件夹查看其属性后,再做比较。

     我在学习《Java编程思想》 io章节的时候学习到用递归法计算出某文件夹的大小,在原代码基础上进行修改,开发出一个非常实用的小工具,可以方便的列出某文件夹下所有子文件夹及文件的大小及其数量,不仅如此,稍加扩展还能得到您想要的其他信息,我只在此抛砖引玉。附上运行结果图:


说明:

1. df实际对应df.bat,将其加入path后在cmd窗口可以直接输入,df.bat内容如下:

@echo off
java -cp ".;xxx" comm.df %1

2.  df后不加参数,则是列出当前目录的文件信息;若加路径参数,在列出目标路径下文件的信息。

是不是很方便呢 ^_^。


闲言少叙,最后贴上代码:

df.java

package comm;

import java.io.File;
import java.util.ArrayList;
import java.util.Formatter;
import java.util.Iterator;
import java.util.List;

public class df {
	static Formatter f = new Formatter(System.out);
	static String strF = "%-10s%7s %11s %10s   %-20s\n";
	static class Node{
		String fileName;
		String permission;
		TreeInfo treeInfo;
		private Node(String fileName, String permission, TreeInfo treeInfo) {
			this.fileName = fileName;
			this.permission = permission;
			this.treeInfo = treeInfo;
		}
	}
	
	private static class TreeInfo implements Iterable<File>{
		public List<File> files = new ArrayList<File>();
		public List<File> dirs = new ArrayList<File>();
		public List<File> unReachables = new ArrayList<File>();
		public long size = 0;
		@Override
		public Iterator<File> iterator() {
			return files.iterator();
		}
		void addAll(TreeInfo other){
			files.addAll(other.files);
			dirs.addAll(other.dirs);
			unReachables.addAll(other.unReachables);
			size += other.size;
		}
	}
	
	public static TreeInfo recurseDirs(File startDir, String regex){
		TreeInfo result = new TreeInfo();
		if(startDir.isDirectory()){
			File[] files = startDir.listFiles();
			if(files != null){
				for(File item : files){
					if(!item.canRead()) {
						result.unReachables.add(item);
						continue;
					}
					if(item.isDirectory()){
						result.dirs.add(item);
						result.addAll(recurseDirs(item, regex));
					}else{
						if(!item.canRead()) {
							result.unReachables.add(item);
							continue;
						}
						if(item.getName().matches(regex)){
							result.files.add(item);
							result.size += item.length();
						}
					}
				}
			}else{
				result.unReachables.add(startDir);
			}
		}else{
			if(startDir.canRead()){
				if(startDir.getName().matches(regex)){
					result.files.add(startDir);
					result.size += startDir.length();
				}
			}else{
				result.unReachables.add(startDir);
			}
		}
		return result;
	}
	
	
	public static TreeInfo walk(String start){
		return recurseDirs(new File(start), ".*");
	}
	
	public static TreeInfo walk(File start){
		return recurseDirs(start, ".*");
	}
	
	public static String getPermission(File file){
		String d = file.isDirectory() ? "d" : "-";
		String r = file.canRead() ? "r" : "-";
		String w = file.canWrite() ? "w" : "-";
		String x = file.canExecute() ? "x" : "-";
		return d + r + w + x;
	}
	
	public static void printTitle(){
		f.format(strF, "Permission", "Size", "FileCount", "DirCount", "FileName");
		f.format("--------------------------------------------------------------\n");
	}	
	
	public static void printSingleLine(Node node){
		f.format(strF, node.permission, showSize(node.treeInfo.size), node.treeInfo.files.size(), node.treeInfo.dirs.size(), node.fileName);
	}
	
	private static void printTail() {
		f.format("--------------------------------------------------------------\n");
	}
	
	public static String showSize(long size){
		String result = "";
		if(size / 1024 >= 1){
			if(size / 1024 / 1024 < 1){
				result = String.format("%.2fK", 1.0 * size / 1024);
			}else if(size / 1024 /1024 >= 1 && size / 1024 / 1024 / 1024 < 1){
				result = String.format("%.2fM", 1.0 * size / 1024 / 1024);
			}else{
				result = String.format("%.2fG", 1.0 * size / 1024 / 1024 / 1024);
			}
				
		}else{
			result = String.format("%dB", size);
		}
		return result;
	}
	
	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		String dir = ".";
		if(args.length == 1){
			dir = args[0];
		}
		int fileCnt = 0, dirCnt = 0;
		long totalSize = 0;
		File topFile = new File(dir);
		printTitle();
		for(File file : topFile.listFiles()){
			Node node = new Node(file.getName(), getPermission(file), walk(file));
			printSingleLine(node);
			fileCnt += node.treeInfo.files.size();
			dirCnt += node.treeInfo.dirs.size();
			if(node.permission.startsWith("d"))dirCnt += 1;
			totalSize += node.treeInfo.size;
		}
		printTail();
		long end = System.currentTimeMillis();
		System.out.println(String.format("%s has %d dirs, %d files, total %s.\n"
				+ "Takes %.2f seconds.", topFile.getAbsoluteFile(), dirCnt, fileCnt, showSize(totalSize), 
				(end - start)/1000.0));
	}
	
}


2019-05-02 18:32:55 qq_44973159 阅读数 53
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7034 人正在学习 去看看 良许

路径命令

[root@localhost 桌面]:root是登录用户 localhost代表本地运行系统 桌面就是linux的路径
passwd:修改用户密码
cd …:切换到上级路径
~(波浪线):当前用户下的用户主文件夹
/ :代表根目录,相当于到了计算机下(我的电脑下)

操作文件夹的命令

mkdir 文件夹名 :在根目录(当前目录下)下创建文件夹
cd ~ :切换到用户主目录下操作
pwd:获得当前操作路径
rmdir 文件名:删除文件夹
ls:查看当前路径下的子文件夹

操作文件的命令

cat:获得文件内容。

cat /tools/hello.txt
可以切换到tools下,创建另一个文件data3,并输入内容
cat hello.txt data3:获得2个文件内容

cp:文件复制
cp hello.txt hello :将hello.txt文件复制到hello
cp -r temp tempo :将temp 文件夹复制到tempo

rm :文件删除
rm hello.txt hello :将hello.txt hello两个文件删除复制

mv :移动或重命名
mv hello.txt /home/text 将txt文件复制到text文件中
mv dir1 /home/dir2 目录移动

more、less:显示文件内容
more hello.txt :显示一个【屏幕】的文本
less hello.txt :分页显示文本

通配符:cat c*:以c开头的文件
? [] [-]

Linux统计文件数

阅读数 227

没有更多推荐了,返回首页