我能够将文件从一个文件夹移动到另一个文件夹,但问题是我希望新文件夹中新创建的文件为其创建的日期和文件名。
例如
/scripts/a.log
转移到
/log/8june2012a.log
答案 0 :(得分:5)
cp filename "`date +%Y%m%d`filename"
将文件名复制为 20120608文件名。对于你的例子,这就是你想要的:
cp filename "`date +%d%b%Y`filename"
将文件名复制为 08jun2012filename 。如果您想移动文件而不是复制,请使用mv
代替cp
:
mv filename "`date +%d%b%Y`filename"
答案 1 :(得分:2)
使用几个CPAN模块可以直接进行。自Perl v5.0以来,File::Copy
一直是核心模块,但除非您已经拥有它们,否则需要安装Date::Format
和Path::Class
。
我已按照字面意思采用了您的要求,此解决方案使用%e%B%Y
作为格式在原始文件前面加上创建日期,大写字母转换为小写,空格被剥离。但是这不是很易读,目录列表也不会按日期顺序自动排序,因此我建议使用%Y-%m-%d-
代替将包含strftime
调用的行替换为
my $date = lc strftime('%Y-%m-%d-', @date)
目前,代码只打印了要移动的文件列表及其目标。要实际执行此操作,您应取消对move
的调用。
use strict;
use warnings;
use Path::Class 'dir';
use Date::Format 'strftime';
use File::Copy 'move';
my $source = dir '/scripts/';
my $dest = dir '/log/';
for my $file (grep { not $_->is_dir } $source->children) {
my @date = localtime $file->stat->ctime;
(my $date = lc strftime('%e%B%Y', @date)) =~ tr/\x20//d;
my $newfile = $dest->file($date.$file->basename);
print "move $file -> $newfile\n";
# move $file, $newfile;
}
答案 2 :(得分:2)
这是Perl的解决方案。
#!/usr/bin/perl
use strict;
use warnings;
use File::Copy 'move';
use Time::Piece 'localtime';
my $indir = '/scripts';
my $outdir = '/log';
# get all of the files in the scripts dir
chdir $indir;
my @files = grep -f, glob '*';
foreach my $infile (@files) {
# get the date that the file was created
my $file_created_date = localtime( (stat $infile)[9] );
my $outfile = $file_created_date->strftime('%d%B%Y').$infile;
move $infile, "$outdir/$outfile";
}
顺便说一句,我会将日期格式化为%Y%m%d
(yyyymmdd),因为它为您提供了一致的格式,并允许您更轻松地按日期排序。
答案 3 :(得分:2)
另一种解决方案。
use strict ;
use File::stat ;
use POSIX qw(strftime);
my $File = 'mv.pl';
my $NewFile=strftime("%d%B%Y",localtime(stat($File)->ctime)) . $File ;
rename $File, $NewFile;
答案 4 :(得分:0)
use File::Copy;
move("a.log",$DIRECTORY.get_timestamp().".log");
你的get_timestamp函数应该生成日期。
答案 5 :(得分:0)
我为你写了一个演示,
#!/bin/bash
DATE=`date +"%e%B%Y" | tr -d ' ' | tr A-Z a-z`
for FILENAME in *.log
do
cp "${FILENAME}" "/log/${DATE}${FILENAME}"
done
您可以在“脚本”目录中运行它。