Linux 根据文件名标记将文件移动到不同的目录
我希望编写一个脚本来从目录中移动文件: /主页/mydir/ 根据文件名中的标记,将其发送到另一个目录。我有一堆文件,名称如下: 红色办公室麦克2015蒙特利尔546968.ext 或 $color_$location_$name_$year_$city_$numbers.extension(文件将是各种电影文件:mov、mp4、mkv等) 我希望脚本将文件移动到以下位置: /dir/work/$color/$name 然后验证文件已成功复制,并在复制后删除原始文件 如果脚本将创建to目录(如果它不存在的话),我也会喜欢它 总之,我需要一个脚本来移动基于下划线分隔标记的文件,如果目录不存在,则创建to目录,验证成功复制(可能需要进行大小检查),然后删除原始文件 我在linux上工作,更喜欢bash脚本。我给出的变量是通用的,我将把其他一些东西合并到脚本中,我只是在寻找关于构建框架的帮助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目录(如果
提前感谢您的帮助 它不是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