我有一个目录,其中包含很多文件,这些文件的名称由8个随机字母,数字,_和-组成,例如:
0dckGYH5.jpg
32Pz5-WQ.png
32_17pxH.png
Hsf4BQW9.jpg
xh-fa3Nu.gif
zYtBEaKA.png
...
现在的任务是遍历每个文件,创建一个以文件名的前两个字符命名的目录,然后将文件移至该目录。
最终结构应如下所示:
0d
└── 0dckGYH5.jpg
32
├── 32Pz5-WQ.png
└── 32_17pxH.png
Hs
└── Hsf4BQW9.jpg
xh
└── xh-fa3Nu.gif
zY
└── zYtBEaKA.png
由于我无权在系统上安装任何内容,因此我该如何仅使用基本的shell命令来执行此操作?
的简单组合mkdir -p
,并mv
应有足够
for f in *; do d="${f:0:2}"; mkdir -p "$d"; mv -t "$d" -- "$f"; done
展示:
$ ls
0dckGYH5.jpg 32_17pxH.png 32Pz5-WQ.png Hsf4BQW9.jpg xh-fa3Nu.gif zYtBEaKA.png
$ for f in *; do d="${f:0:2}"; mkdir -p "$d"; mv -t "$d" -- "$f"; done
$ tree .
.
├── 0d
│ └── 0dckGYH5.jpg
├── 32
│ ├── 32_17pxH.png
│ └── 32Pz5-WQ.png
├── Hs
│ └── Hsf4BQW9.jpg
├── xh
│ └── xh-fa3Nu.gif
└── zY
└── zYtBEaKA.png
5 directories, 6 files
如果您的系统版本mkdir
没有该-p
选项,那么您可以显式测试目录的存在,例如
for f in *; do d="${f:0:2}"; [[ -d "$d" ]] || mkdir "$d"; mv -t "$d" -- "$f"; done
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句