在 /Desktop/a/ 上,有一组文件:
DSCN1840.AVI00001.png
DSCN1840.AVI00002.png
DSCN1840.AVI00003.png
DSCN1841.AVI00001.png
我想要的是具有以下结构:
Desktop/a/DSCN1840/
DSCN1840.AVI00001.png
DSCN1840.AVI00002.png
DSCN1840.AVI00003.png
Desktop/a/DSCN1841/
DSCN1841.AVI00001.png
答案1
作为一次性步骤,您可以循环遍历所有文件并收集所需的子目录名称;如果该子目录尚不存在,则创建它;然后将该文件移动到该子目录中:
for f in *.png
do
subdir=${f%%.*}
[ ! -d "$subdir" ] && mkdir -- "$subdir"
mv -- "$f" "$subdir"
done
其中的关键部分是 中的参数扩展${f%%.*}
,它表示删除%%
句点后跟任何内容的最长匹配部分 ( ),这有效地剥离了例如.AVI00003.png
文件名的部分,仅留下前导目录指示符。