将相似的文件名移动到目录 - Bash
Posted
技术标签:
【中文标题】将相似的文件名移动到目录 - Bash【英文标题】:Move similar filenames to dir - Bash 【发布时间】:2017-03-09 15:49:48 【问题描述】:我有几个名称为ID-sequence.jpg
的图像,其中一组图像的 ID 相同,例如:
4fd-00027-1.jpg
4fd-00027-2.jpg
4fd-00027-3.jpg
6gq-00017-1.jpg
6gq-00017-2.jpg
6gq-00752-3.jpg
6gq-00752-4.jpg
...现在我需要将所有这些文件移动到它们自己的目录中,该目录也应与ID
命名相同。我相信我需要这样的东西:
for FILE in *; do
ID_REGEX="(.*(?=-))"
if [[ $FILE =~ $ID_REGEX ]]; then
ID="$BASH_REMATCH[1]"
echo "$ID"
mkdir -p "/Users/myname/images_organized/$ID"
$(mv "/Users/myname/images/$FILE" "/Users/myname/images_organized/$ID/$FILE" )
fi
done
...但它什么也没做。也没有错误。
【问题讨论】:
How to mkdir only if a dir does not already exist?的可能重复 啊,谢谢,知道但没想到。但我的代码仍然没有移动文件。 你知道打印脚本流的 bash-x
选项吗?
【参考方案1】:
工作量太大。
for file in *
do
dir="$file%%-*"
[ -d "$dir" ] || mkdir "$dir"
mv "$file" "$dir"
done
【讨论】:
hmm.. 命名问题:mv: rename /Users/myname/images_500ge2/77-52133-205.jpg to /Users/myname/images_organized/77/77-52133-205.jpg: No such file or directory
不,本例中的 ID 是77-52133
(最后出现的-
)
啊,最后次出现意味着使用%
而不是%%
。以上是关于将相似的文件名移动到目录 - Bash的主要内容,如果未能解决你的问题,请参考以下文章