将所有文件移动到文件名开头的子目录中

詹戈·布里克(JangoBrick)

我有一个目录,其中包含很多文件,这些文件的名称由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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在所有子目录中的Ubuntu中将文件名更改为小写

如何使用通过FTP的骆驼路由将所有文件从目录(包括子目录)移动到特定目录,而目标中没有子目录?

Bash / Shell将所有文件从子目录移动到目标目录?

如何使用python遍历Google Cloud Storage子目录中的所有文件名?

将子目录的所有内容递归移动到python中的父目录

如何根据文件名开头的编号将PDF文件移动到以相同编号开头的目录中?

对于目录,将具有子目录名称+旧文件名的子目录中的文件重命名为新目录

将子目录中的所有文件移动到工作目录中,并将路径添加为前缀

将多个文件移动到Linux中的子目录

将所有文件和目录移动到Windows中的新子目录

如何将子目录中的所有文件递归移动到单个目录?

无法将文件移动到其自身的子目录

将所有具有相同名称的文件从子目录移动到一个目录中

如何从所有子目录中获取特定的文件名?

如何将具有特定文件扩展名的所有文件从子目录移动到单个目录

将目录中的所有文件移动到同一目录中的新子目录

将文件移动到父目录,并在文件名之前加上子目录名

将所有文件移动到以部分文件名命名的子目录中

将所有子子目录的内容仅移动到其子目录中

将.txt文件移动到子目录中

将递增值写入子目录中与文件名匹配的所有文件

如何将某些文件移动到子目录?

将文件名中带有日期的文件移动到目录中

AWK-创建新的子目录并根据文件名将文件移动到该子目录中

将所有文件从子目录移动到父目录

移动所有文件在特定的子目录中

如何将所有子目录移动到bash中的父文件夹中?

在目录及其所有子目录中搜索文件名而不识别子目录中的文件

将具有特定扩展名的文件从目录移动到 PHP 中的子目录