将图像移动到具有图像文件名的文件夹中

Moving images into folders with image filename

我有一个名为 folder1 的文件夹,里面有一堆图片,我想将每张图片保存在一个单独的文件夹中。该文件夹应与文件同名,例如,如果图片名为 "st123" 我想创建一个名为 "st123" 的文件夹并将图片移动到该文件夹​​中。我尝试了以下操作,但出现无法移动到其自身的子目录的错误。还有另一种方法可以解决这个问题吗? 否则,是否可以将图像 "st123" 保存在名为“123”(最后 3 个字符)的文件夹中?

#!/bin/bash
Parent="/home/me/myfiles/folder1"
for file in $Parent; do
dir="${file%%.*}"
mkdir -p "$dir"
mv "$file" "$dir" 
done

你几乎成功了!更改第 3 行的一部分,以便 for 循环遍历目录内的内容而不是目录本身:

#!/bin/bash
Parent="/home/me/myfiles/folder1"
for file in $Parent/*; do
dir="${file%%.*}"
mkdir -p "$dir"
mv "$file" "$dir" 
done

https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html#Command-Substitution

此解决方案可能对您有用,但如果您想递归 迭代图像,我建议您使用find。如果确实如此,请告诉我,我将使用相关代码编辑此答案。

for image in /home/me/myfiles/folder1/*; do
    if [[ -f $image ]]; then 
        newf="${image%%?([ab]).*}"
        mkdir -p "$newf"
        mv -- "$image" "$newf"
    fi
done

测试(extglob 已启用):

$ [/home/rany/] touch test/st123a.tif test/st123b.tif test/st456.jpg test/st456b.jpg test/st789.tif
$ [/home/rany/] for image in test/*; do newf="${image%%?([ab]).*}"; mkdir -p "$newf"; mv -- "$image" "$newf";done
$ [/home/rany/] tree test
test
├── st123
│   ├── st123a.tif
│   └── st123b.tif
├── st456
│   ├── st456b.jpg
│   └── st456.jpg
└── st789
    └── st789.tif

3 directories, 5 files

编辑:

根据 OP 的要求,我添加了以下更改:

  • Trim 文件名的后缀 ab,例如,文件名 st123a.extst123b.ext 将转到同一目录 st123重要:此功能需要启用 extglob(即 shopt -s extglob)。