我不是专家bash,但我尝试解决这个问题:
*.log
,我不知道创建日期,$date_when_was_file_created
的分隔目录中,例如。必须将创建的文件2017-01-12
移动到名为2017-01-12
创建的文件2017-02-12
必须移至名为2017-02-12
所以我拥有:
#!/bin/bash
dirs=`ls -la -F --full-time *.LOG | awk '{print $6}'`
filedate=`ls -la -F --full-time *.LOG | awk '{print $6}'>dat`
mkdir $dirs
for data in `cat dat`
do echo " ther are file to be copied:--> `ls -la -F --full-time *.LOG | awk '{print $6 " " $9}' | grep $data | awk '{print $2}'` "
if [[ $data == $dirs ]];
then cp `ls -la -F --full-time *.LOG | awk '{print $6 " " $9}' | grep $data | awk '{print $2}'` $dirs
fi
done
但它不起作用,意味着创建目录,但不复制文件,为什么?我不知道......有什么建议吗?
答案 0 :(得分:0)
POSIX shell和bash都提供参数扩展来修剪字符串的部分。 stat
实用程序可以提供完整的创建时间(包括小时,分钟,秒......)。只需使用stat
函数,并从stat
返回的字符串创建时间中删除日期。然后使用日期创建一个目录并将日志文件移入其中。 E.g。
for file in *.log ## loop over log files
do
ctime=$(stat -c%y "$file") ## get full create time
cdate="${ctime%% *}" ## extract YYYY-MM-DD date
mkdir -p "$cdate" ## create dir if it doesn't exist
mv "$file" "$cdate" ## move log to directory
done
仔细看看,如果您有其他问题,请告诉我。