⑴ 用shell层级遍历dir目录,统计文件总数量、总大小,并按扩展名分类统计各种文件的数目、总大小。
#!/bin/bashfunctiondirectory(){forfilein$(ls$1)dobasepath="$1/$file"if[-d"$basepath"];thenecho"|-directory:$file"$(-h$basepath|cut-f1)directory$basepathelif[-f"$basepath"];thenecho"|–file:$file"$(-h$basepath|cut-f1)fidone}directory$1调用方法:./testfind.sh你要遍历的路径我只是简单的写了一个,大致功能的思想如此,你也可以在此基础上进行扩展,不过好像应该有现成的,你网上搜一搜吧。。
⑵ 如何用shell脚本遍历指定目录下的文件,并按后缀名分类
脚本1:#!/bin/bash##cd /tmp/scriptcfile=` find -name '*.c' `hfile=` find -name '*.h' `for fc in $cfiledocfname=`basename -s .c $fc`cat $fc >/tmp/scripttest/$cfname.txtdonefor fh in $hfiledocp $fh /tmp/scripttestdone
⑶ 如何在linux中使用shell脚本遍历指定目录的文件,将创建时间大于指定时间的文件,复制到指定目录下。
#!/bin/shDIR=$1TIME=$2OTDIR=$3TMP=`find$1-mtime+$2-print`echo$TMPcp$TMP$OTDIR执行时要有3个参数指定文件的目录大于指定的时间复制到的目录没写验内证部分参数顺序不要容写错
⑷ shell怎么遍历一个文件夹下所有文件
# find . -type f./a./normal/log-1./normal/log-2./normal/log-3通过find找到文件那么遍历就用循专环for i in `属find . -type f`do echo $idone
⑸ shell 遍历目录中所有文件 改名
#!来/bin/bashbase_dir=$(dirname$0)fordirin$(ls$base_dir);docurrent_dir="$base_dir/$dir"if[!-d$current_dir];thencontinuefiforold_file_namein$(ls$current_dir);doold_file="$current_dir/$old_file_name"if[!-f$old_file];thencontinuefinew_file_name="$current_dir/${old_file_name}_${dir}"mv$old_file$new_file_namedonedone
改名的部分帮你写了,放源到把脚本放到你说的有好多目录的那个目录里执行就可以了
数据库的部分自己想吧
⑹ 解决shell脚本遍历带空格的文件/文件夹名
在做iOS Flutter依赖引入的时候,需要去遍历Pods 工程中的文件,而这个工程下刚好有一个名称带空格的文件夹。如下:
如下的脚本会出问题:
原因是,执行 ls 命令的时候,文件夹名称带了空格,被当成了分隔符。
网上查了一下相关资料,都是说把分隔符修改掉,使用时再改回来。于是脚本变成了这样:
但是这样还会有问题,我们知道 $1 是获取第一个参数,那么在名称带空格的文件夹递归入参时,又会因为空格的问题变成两个参数。那问题就变成:把过个参数变成一个参数。答案就是: $* 。 此外还需要特别注意的是,每一个引用带空格的文件或者文件夹名称时必须带上引号,才能成为一个整体。 最终脚本如下:
如果解决了你的问题,玛法点个赞或者留言,让我知道你来过。
⑺ linux shell中的遍历目录并删除目录下与目录名相同的文件
先设定实验环境:#造5个目录,每个目录下,造3个文件和两个子目录如下:cd$home/tmpforiind1d2d3d4d5domkdir-p$itouch$i/1.txt$i/2.txt$i/3.txtmkdir-p$i/tmp1$i/tmp2done#检验测试环境:$ls-lrd1total0-rw-r–r–1wenleecomm0dec2210:351.txt-rw-r–r–1wenleecomm0dec2210:352.txt-rw-r–r–1wenleecomm0dec2210:353.txtdrwxr-sr-x2wenleecomm256dec2210:35tmp1/drwxr-sr-x2wenleecomm256dec2210:35tmp2/#利用下列脚本来实现你要做的:cd$home/tmpforiin*/1.txtdoecho"found$i,save$iandremoveeverythingelseunder$(dirname$i)/"save_this_file=$(basename$i)curr_dir=$(dirname$i)#把这个1.txt暂时存到/tmp里面去,为了避免已经有同样的档案名称在/tmp,加上$$(i.e.pid)mv$i/tmp/${save_this_file}.$$rm-rf$curr_dirmkdir-p$curr_dirmv/tmp/${save_this_file}.$$$curr_dirdone#屏幕执行输出如下:foundd1/1.txt,saved1/1.txtandremoveeverythingelseunderd1/foundd2/1.txt,saved2/1.txtandremoveeverythingelseunderd2/foundd3/1.txt,saved3/1.txtandremoveeverythingelseunderd3/foundd4/1.txt,saved4/1.txtandremoveeverythingelseunderd4/foundd5/1.txt,saved5/1.txtandremoveeverythingelseunderd5/#复验实验环境:$ls-ld?/*-rw-r–r–1wenleecomm0dec2210:35d1/1.txt-rw-r–r–1wenleecomm0dec2210:35d2/1.txt-rw-r–r–1wenleecomm0dec2210:35d3/1.txt-rw-r–r–1wenleecomm0dec2210:35d4/1.txt-rw-r–r–1wenleecomm0dec2210:35d5/1.txtok?thanks!
⑻ shell 编写一程序,列出当前目录下指定文件的文件名,文件的首行为#!/bin/bash
#!/bin/bashforfilein./*doiftest-f$filethenname=`basename$file`first_line=`sed'1!d'$file`if["$first_line"=="#!/bin/bash"]thenecho$namefifidone
我解释下代码,首先,在for循环中遍历当前目录下的所有文件,然后回外层的if判断答当前文件类型,如果是文件,则使用basename $file用来获取当前文件的文件名(包括拓展名)并赋值给变量name中,然后使用sed '1!d' $file获取文件第一行的内容并赋值给变量first_line,再在内层的if中判断第一行的内容是否是“#!inash”,如果是,则打印该文件的文件名。
ps:我也是刚学shell,写了半天才整出来,就当是自己也顺便练手了,哈哈。
我在我电脑上测试了下,没有问题,如果你还有问题请追问。
⑼ 在linux shell(bash)编程中,如何通过递归方式遍历文件
写一个函数,函数的参数是目录路径字符串函数内使用 ls -s dir_path , 然后for 遍历循环如果是目录则继续调用自身如果是文件则答应文件名从执行优化的角度来讲,可以把判断目录还是文件的代码放在循环外层. 好久没写shell了 ,我这也没环境测试 , 只能给个思路,函数的具体写法自己找一下资料吧.另外,find命令可以直接完成你要做的事.
⑽ linux shell 遍历文件夹 并将结果保存 到变量
#!/bin/bash(($#<1))&&echo"paramiszero!"&&exit1[!-d$1]&&echo"$1notpath"&&exit1dir=$1dir_p="$dirDirectory:"cd$dirdir=`pwd`foriin`ls$dir`doif[-d$i];then/tmp/sh/dir_file$i#我的脚本文件在/tmp/sh中,需要改一下这里elsedir_p="$dir_pFile$i"fidonecd..echo$dir_p
实验结果:
[[email protected] sh]# ./dir_file /tmp/python/
python_2 Directory : File 1.log File 2.log
python_3 Directory : File 3.log
/tmp/python/ Directory : File p File t.py File y.py
这样应该可版以吧,试试看权
未经允许不得转载:山九号 » shell遍历文件名|shell 编写一程序