批量删除包含某字符串的文件

删除名称中包含某字符串的文件

应用场景:写了很多版的文档,定稿后只保留终稿,草稿状的都删除。

如下目录结构,删除root_dir下文件名称包含草稿的所有文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/root_dir
草稿_1.txt
草稿_2.txt
终稿_1.txt
终稿_2.txt
/child_dir
child_草稿_1.txt
child_草稿_2.txt
child_终稿_1.txt
child_终稿_2.txt
/child_dir_2
child_2_草稿_1.txt
child_2_草稿_2.txt
child_2_终稿_1.txt
child_2_终稿_2.txt

这里需要层层遍历文件夹,如root_dir中包含了文件夹child_dir。

方法1:遍历删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
cd root_dir
for file in `ls .`
do
if [ -f $file ]
then
rm *草稿*
fi
if [ -d $file ]
then
echo $file 为目录
cd $file
for f in `ls .`
do
if [ -f $f ]
then
rm *草稿*
fi
done
cd ..
fi
done

删除完毕。

方法2:使用find更简洁

1
2
cd root_dir
find . -name "*未完*" -exec rm -f {} \;

删除完毕。

注意:一定要保证进入了需要删除文件的目录,该命令无法撤回

find命令参数可查

遍历目录删除文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

function getdir(){
for element in `ls $1`
do
dir_or_file=$1"/"$element
if [ -d $dir_or_file ]
then
getdir $dir_or_file
fi
else
if [[ $element == 【未完】* ]]
then
rm $dir_or_file
echo $dir_or_file
fi
fi
done
}
root_dir="_posts"
getdir $root_dir

这里删除要使用全路径,否则会报错找不到文件。

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2016-2020 蜀山柚柚
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信