场景是:
我有一个包含数千张图片格式的目录 YYYYMMDDXXX
YYYY: stands for year
MM: stands for month
DD: stands for day
XXX: stands for an ID of the picture, it ranges from 1 to n characters
Run Code Online (Sandbox Code Playgroud)
需要的:
将每张图片移动到当天的文件夹中。我,e,读取图片的名称,假设它的名称是201504121A,那么这张图片将被移动到名为的目录,12-04-2015然后将其重命名201504121A为仅 ID,这意味着1A. 如果未建立此目录,则创建它。
在 bash 中:
#! /bin/bash
for i
do
f="${i##*/}"
y="${f:0:4}"
m="${f:4:2}"
d="${f:6:2}"
x="${f:8}"
mkdir -p "$d-$m-$y" && mv "$i" "$d-$m-$y/$x"
done
Run Code Online (Sandbox Code Playgroud)
将其另存为脚本(例如,mover.sh)并执行以下操作:
/path/to/mover.sh *
Run Code Online (Sandbox Code Playgroud)
或者:
find /path/to/pics -type f -exec /path/to/mover.sh {} +
Run Code Online (Sandbox Code Playgroud)
使用echo代替mkdir和mv来试驾它。
f="${i##*/}" - 获取文件名剥离目录组件。y="${f:0:4}",以及其他四个 - 获取该长度位置的子字符串。或者,使用正则表达式而不是子字符串,还有实际测试模式的好处:
/path/to/mover.sh *
Run Code Online (Sandbox Code Playgroud)