我有一堆这样的文件
5830_1.png
5830_2.png
5830_3.png
5831_1.png
5832_1.png
5832_2.png
我想将这些文件全部排序到以文件名的前缀作为目录名的目录中。
所以我最终会
5830/
5830_1.png
5831_2.png
...etc
5831/
5832/
是否有捷径可寻?
POSIXsh
单线:
for file in *.png; do mkdir -p -- "${file%%_*}" && \
mv -- "$file" "${file%%_*}"; done
解释:
.png
当前目录中的每个文件。mkdir
带有文件前缀;${file%%_*}
删除第一个下划线及其后的所有内容;在-p
确保mkdir
将如果目录已经存在安静。mv
该文件进入目录。根据HalosGhost的建议,如果所需的最终结构是
5830/
1.png
2.png
3.png
5831/
1.png
5832/
1.png
2.png
上面的单线可以稍作修改:
for file in *.png; do mkdir -p -- "${file%%_*}" && \
mv -- "${file}" "${file%%_*}/${file##*_}"; done
这次,目标由目录${file%%_*}
($file
下划线之前)和新文件名${file##*_}
($file
下划线之后)组成。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句