将每个文件传播到其关联目录的脚本

May*_*hux 1 scripts

场景是:

我有一个包含数千张图片格式的目录 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. 如果未建立此目录,则创建它。

mur*_*uru 6

在 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代替mkdirmv来试驾它。

  • f="${i##*/}" - 获取文件名剥离目录组件。
  • y="${f:0:4}",以及其他四个 - 获取该长度位置的子字符串。

或者,使用正则表达式而不是子字符串,还有实际测试模式的好处:

/path/to/mover.sh *
Run Code Online (Sandbox Code Playgroud)