将图像移动到具有图像文件名的文件夹中
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 文件名的后缀
a
或 b
,例如,文件名 st123a.ext 和st123b.ext 将转到同一目录 st123。 重要:此功能需要启用 extglob(即 shopt -s extglob
)。
我有一个名为 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 文件名的后缀
a
或b
,例如,文件名 st123a.ext 和st123b.ext 将转到同一目录 st123。 重要:此功能需要启用 extglob(即shopt -s extglob
)。