如何根据正则表达式模式将文件移动到新文件夹(尚未创建)?

How can I move files to new folders (not created yet) according to a regex pattern?

我在 Macbook 上,想使用 bash 来完成任务。

假设我在一个目录中有一个文件列表,例如:

item1_2352352352.jpg
item2_2352352352.jpg
item3_2352352352.jpg
item3_2352352352.jpg

如何使用 bash 一行将这些文件排序并移动到新文件夹?如果不是bash,python也可以。

我希望将文件夹命名为 item1、item2 等(第一个下划线之前的所有内容)。

这样就可以了:

for i in item*_*; do folder=${i%_*}; mkdir -p "$folder"; mv -n "$i" "$folder"; done

解释:

for i in item*_*; do          # for loop, loops over every file which fits the expression "item*_*" and puts current filename in $i
    folder=${i%_*}            # removes everything after a "_" from $i and saves the output to $folder
    mkdir -p "$folder"        # creates folder with content of $folder and without errors if directory exists (-p)
    mv -n "$i" "$folder"      # moves files without overwriting (-n) 
done