Shell代码
重命名某个类型的所有文件
#!/bin/bash
for file in ./input/*
do
echo $file
echo ${file##*/}
# mkdir -p ./output/${file##*/}
rename -v 's/png/jpg/' $file/*.png
done
① 循环需要的文件夹
② ${file##*/}
这个的意思为取路径斜杆/最后的内容。
例如文件名:file=/home/dd/a.txt
, 则${file##*/}
为a.txt
。
${file}
:取file变量本身的内容
${file#*/}
:删掉第一个/
及其左边的字符串
${file##*/}
:删掉最后一个/
及其左边的字符串
Tips: 使用一个#
为最小匹配,两个#
为最大匹配,右边的匹配使用%
。
③ 使用rename之前,可能需要先安装。
rename -v 's/png/jpg/' $file/*.png
将$file/
下的所有png
图片都重命名为jpg
。
移动指定范围内的文件
#!/bin/bash
# 循环1~100的数
for i in {1...100}
do
num=$(echo ${i}|awk '{printf("%04d\n", $0)}')
dir=/home/ddd
mv $dir/video_$num $dir/test
done
将/home/ddd
文件夹下video_0001~video_0100
的文件移动到/home/ddd/test
。
① awk
指定的作用是当数字不足位数的时候,向右填充0。%04d
所以填充四个0,当i
等于2时,num
输出为0002
。
② $()
的作用将其中包含的命令的输出赋值给变量num
。
Tips: 没事别打空格。