Linux 根据文件名标记将文件移动到不同的目录

Linux 根据文件名标记将文件移动到不同的目录,linux,bash,automation,copying,Linux,Bash,Automation,Copying,我希望编写一个脚本来从目录中移动文件: /主页/mydir/ 根据文件名中的标记,将其发送到另一个目录。我有一堆文件,名称如下: 红色办公室麦克2015蒙特利尔546968.ext 或 $color_$location_$name_$year_$city_$numbers.extension(文件将是各种电影文件:mov、mp4、mkv等) 我希望脚本将文件移动到以下位置: /dir/work/$color/$name 然后验证文件已成功复制,并在复制后删除原始文件 如果脚本将创建to目录(如果

我希望编写一个脚本来从目录中移动文件:

/主页/mydir/

根据文件名中的标记,将其发送到另一个目录。我有一堆文件,名称如下:

红色办公室麦克2015蒙特利尔546968.ext

$color_$location_$name_$year_$city_$numbers.extension(文件将是各种电影文件:mov、mp4、mkv等)

我希望脚本将文件移动到以下位置:

/dir/work/$color/$name

然后验证文件已成功复制,并在复制后删除原始文件

如果脚本将创建to目录(如果它不存在的话),我也会喜欢它

总之,我需要一个脚本来移动基于下划线分隔标记的文件,如果目录不存在,则创建to目录,验证成功复制(可能需要进行大小检查),然后删除原始文件

我在linux上工作,更喜欢bash脚本。我给出的变量是通用的,我将把其他一些东西合并到脚本中,我只是在寻找关于构建框架的帮助


提前感谢您的帮助

它不是bash脚本,但perl在这方面做得更好,并且安装在所有Linux系统上

while(<>) {
    chomp;
    $file = $_;
    ($colour, $location, $name, $year, $city, $numbers) = split(/_/,$file);
    $dest0 = "/dir/work/$colour";
    $dest1 = "$dest0/$name";
    mkdir ($dest0) unless (-d $dest0);
    mkdir ($dest1) unless (-d $dest1);
    rename ($file, "$dest1/$file");
}

我可以在网上摸索,找到一个for循环来完成这个任务。我使用了
cut
,它使事情变得简单。以下是对我有效的方法:

#!/bin/sh

cd "${1:-.}"

for f in *.*; do
    color=`echo "$f" | cut -d'_' -f1`
    name=`echo "$f" | cut -d'_' -f3`
    todir="/dir/work/$color/$name"
    mkdir -p "$todir"
    mv "$f" "$todir"
done
这非常有效,我希望它能帮助其他可能需要基于部分文件名创建目录的人

shebang下面的第一行将其设置为,以便它可以查看当前工作目录,或者查看作为参数传递的目录


感谢那些在原始帖子上插话的人。我是个新的脚本编写者,所以我花了一段时间才弄明白这件事。我很喜欢这个网站,它非常有用

如果您正在寻找一种标记字符串的方法,请将
read
与自定义
IFS
IFS='''.'read-r颜色位置名称年份城市编号分机一起使用。谢谢您的帮助,但它似乎不起作用。我已经将脚本保存为一个.pl文件,我已经使用+x标志对其运行chmod以使其可执行,并且我被CD保存到包含这些文件的目录中。当我运行脚本时,它只是挂起,没有错误消息,直到我用ctrl+d强制退出它。有什么想法吗?再次感谢你的帮助!将文件名保存到一个文件中,并将文件名用作脚本的参数。在更新
while
行后,该操作非常有效。谢谢
#!/bin/sh

cd "${1:-.}"

for f in *.*; do
    color=`echo "$f" | cut -d'_' -f1`
    name=`echo "$f" | cut -d'_' -f3`
    todir="/dir/work/$color/$name"
    mkdir -p "$todir"
    mv "$f" "$todir"
done