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

标签 bash directory mkdir

我有一个名为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

最佳答案

此解决方案可能对您有用,但如果您想递归地迭代图像,我建议您使用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的请求,我添加了以下更改:

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

关于bash - 将图像移动到具有图像文件名的文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36584186/

相关文章:

linux - 使用用户名、密码和命令执行 sudo su

regex - 使用扩展正则表达式的 Sed 反向引用

php - 同时创建文件夹和上传文件

svn - 如何检测文件以换行符结尾?

oracle - 如何查询Oracle目录的权限?

java - 在java中检查文件创建权限的最佳方法是什么

c++ - 递归计数文件和给定目录的所有目录

shell - 在if循环内的shell脚本中找不到mkdir命令

php - mkdir() 不工作

bash - 根据行结构拆分文件夹中的所有文件