linux shell中的遍历目录并删除目录下与目录名相同的文件

linux shell中的遍历目录并删除目录下与目录名相同的文件,第1张

先设定实验环境:

#

5

目录,每个目录下,造

3

文件和两个子目录如下:

cd

$home/tmp

for

i

in

d1

d2

d3

d4

d5

do

mkdir

-p

$i

touch

$i/1.txt

$i/2.txt

$i/3.txt

mkdir

-p

$i/tmp1

$i/tmp2

done

#

检验测试环境:

$

ls

-lr

d1

total

0

-rw-r--r--

1

wenlee

comm

0

dec

22

10:35

1.txt

-rw-r--r--

1

wenlee

comm

0

dec

22

10:35

2.txt

-rw-r--r--

1

wenlee

comm

0

dec

22

10:35

3.txt

drwxr-sr-x

2

wenlee

comm

256

dec

22

10:35

tmp1/

drwxr-sr-x

2

wenlee

comm

256

dec

22

10:35

tmp2/

#

利用下列脚本来实现你要做的:

cd

$home/tmp

for

i

in

*/1.txt

do

echo

"found

$i,

save

$i

and

remove

everything

else

under

$(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_dir

mkdir

-p

$curr_dir

mv

/tmp/${save_this_file}.$$

$curr_dir

done

#

屏幕执行输出如下:

found

d1/1.txt,

save

d1/1.txt

and

remove

everything

else

under

d1/

found

d2/1.txt,

save

d2/1.txt

and

remove

everything

else

under

d2/

found

d3/1.txt,

save

d3/1.txt

and

remove

everything

else

under

d3/

found

d4/1.txt,

save

d4/1.txt

and

remove

everything

else

under

d4/

found

d5/1.txt,

save

d5/1.txt

and

remove

everything

else

under

d5/

#

复验实验环境:

$

ls

-l

d?/*

-rw-r--r--

1

wenlee

comm

0

dec

22

10:35

d1/1.txt

-rw-r--r--

1

wenlee

comm

0

dec

22

10:35

d2/1.txt

-rw-r--r--

1

wenlee

comm

0

dec

22

10:35

d3/1.txt

-rw-r--r--

1

wenlee

comm

0

dec

22

10:35

d4/1.txt

-rw-r--r--

1

wenlee

comm

0

dec

22

10:35

d5/1.txt

ok?

thanks!

1、先使用SSH连接工具进入到linux系统中。

2、在linux系统中使用删除的命令是rm,是英文remove的缩写,使用参数比较简单,我们可以使用查询命令查看使用方式。

3、除了进入目录下直接输入文件名,rm命令后还可以跟文件的绝对路径名,这样就无需进入到目录下进行删除了。

4、我们也可以使用强制命令删除,一般情况下都是直接使用强制命令删除文件,且无需提示,方便快捷rm -f 文件名。

5、另外如果目录下都是需要删除的文件,也就是批量删除的话,可以使用rm -fr 目录的形式,删除目录下的一切文件例如 rm -fr ./*。

6、同时rm命令还支持文件的正则表达式匹配,可以模糊地进行删除 *** 作,比如我们可以删除目录下的所有txt文件rm -f *.txt。

注意事项:

linux除了在服务器 *** 作系统方面保持着强劲的发展势头以外,在个人电脑、嵌入式系统上都有着长足的进步。使用者不仅可以直观地获取该 *** 作系统的实现机制,而且可以根据自身的需要来修改完善这个 *** 作系统,使其最大化地适应用户的需要。

可以直接写脚本,每天定时删除:

例如:(删除/data/bak目录下以20开头,后缀为*.jar.gz,更改时间距现在5天以前的所有文件,也就是说只保留最近5天的备份文件)

find /data/bak -name "20*.jar.gz" -type f -mtime +5 -exec rm {} \>/dev/null 2>&1

/data/bak 备份目录(改成你自己的)

2010*_bak.gz 文件名及类型 (改成你自己的,注意*)

-type f表示查找普通类型的文件,f表示普通文件。

-mtime +5 按照文件的更改时间来查找文件,+5表示文件更改时间距现在5天以前;如果是 。

-exec rm {} \ 表示执行rm命令,exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。

/dev/null 2>&1 把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面;其中的&表示让该命令在后台执行。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12034667.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存