我一直在尝试研究如何自动化脚本(shell或其他),定期(例如每小时一次)将具有常量命名约定的文件移动到文件夹(如果不存在则自动创建)。 文件是这样的:
Camera1_01_20171213221830928.jpg
Camera1_01_20171213223142881.mp4
基本上它会做家务'。
我是shell脚本的新手,如果没有文件夹(例如20171213文件夹),我就无法解决如何创建文件夹,然后将相关文件移入其中?< / p>
非常感谢任何帮助。
答案 0 :(得分:0)
您可以使用if [ ! -d "$DIRNAME ]"
查看名为$DIRNAME
的目录是否存在。此外,您可以使用mkdir
创建目录。
或者,您可以使用mkdir
并忽略目录已存在的任何错误。除此之外,没有负面的副作用。
答案 1 :(得分:0)
我无法为您编写脚本,因为您的帖子中没有足够的具体信息,但以下是我认为您需要的工具:
基本代码如下所示:
#!/bin/bash
FILES=/home/joshua/photos/sort-me
for photo in $FILES/*.jpg; do
if [[ -f photo ]]; then
new_photo_location= #<figure this part out based on your needs>
echo "I would move $photo to $new_photo_location"
#mv $photo $new_photo_location
fi
done
我建议只使用该回显来运行它,直到您确切看到自己喜欢的内容,然后对该行进行评论并取消对mv
行的解除。
最后,要在每小时运行脚本,您的cron条目将如下所示。 (键入crontab -e
以编辑您的crontab):
# Min Hour Day Month Day-of-Wk Year Must use absolute path
0 * * * * * /home/joshua/bin/sort-photos.sh
答案 2 :(得分:0)
<body style="text-align:center">
<h2>Popup</h2>
<div class="popup" onclick="myFunction()">Click me to toggle the popup!
<span class="popuptext" id="myPopup">A Simple Popup!</span>
</div>
</body>
关于这个脚本的一些解释...... 第一部分将当前日期设置为变量VDIR,将前缀Camera *设置为VFILESFX。 如果此目录不存在,条件命令将创建一个VDIR中存在值的目录,之后转到while命令,每小时交互一次,列出所有文件,其前缀设置为VFILESFX并将此文件移动到具有当前日期的目录
答案 3 :(得分:0)
我终于使用了一个perl脚本,我可以更容易地从一个cron作业中触发:
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
use File::Copy;
main();
sub main
{
my $dir = "/srv/NAS1/Camera1";
opendir(my $fh, $dir) or die("Could not open '$dir' for reading: $!\n");
my @files = readdir($fh);
closedir($fh);
foreach my $file(@files)
{
if(-d $file)
{
next; # skip file if its a folder
}
if($file =~ /Camera1_01_(\d{8})\d{9}\.(jpg|mp4)/)
{
my $date = $1;
$date =~ /(\d{4})(\d{2})(\d{2})/;
my $folder = "$1-$2-$3";
# if the directory doesn't exist
if(!(-e -d "${dir}/${folder}"))
{
mkdir("${dir}/${folder}");
}
move("${dir}/$file","${dir}/${folder}");
}
}
}
感谢您的贡献。