根据条件关闭软件

用shell批量修改文件名

批量更新某文件夹下多个git仓库

统计命令汇总


某个文件夹下面有100个二级文件夹,每个二级文件夹里有多个文件。将所有二级文件夹里的文件,挪动到一级文件夹


mv.sh:

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

for i in $files; do

if [[ -d $i ]]; then
echo "当前文件夹为:" $i

#统计当前文件夹下的文件个数,如果不为空文件夹,执行移动操作 https://www.bbsmax.com/A/kjdwwDnEdN/

#count=$(ls -l |grep "^-"|wc -l )
count=$(find $i -type f | wc -l )

echo "当前文件夹下文件数量为:" $count

# https://www.runoob.com/linux/linux-shell-process-control.html
if (($count >0));then
mv $i/* ./
fi
fi
done



以上代码有个bug,当文件夹名称中包含空格时,在第一步files=$(ls)时,会根据空格将一个文件夹拆成多个..之后显然找不到被分割后的文件夹

所以需要先做一步操作,将文件夹名称中的空格去除,或用其他符号替换掉

brew install rename

1
2
 #将当前文件夹内所有文件的名字中得所有空格替换为_。其中g代表所有,如果不加g,如果文件名字中有多个空格,仅替换第一个
rename 's/ /_/g' *

所以最终脚本为

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

rename 's/ /_/g' *
files=$(ls)

echo "当前file为:" $files
for i in $files; do

echo "当前文件夹为:" $i
if [[ -d $i ]]; then

#统计当前文件夹下的文件个数,如果不为空文件夹,执行移动操作 https://www.bbsmax.com/A/kjdwwDnEdN/

#count=$(ls -l |grep "^-"|wc -l )
count=$(find $i -type f | wc -l )

echo "当前文件夹下文件数量为:" $count

# https://www.runoob.com/linux/linux-shell-process-control.html
if (($count >0));then
mv $i/* ./
fi
fi
done