根据文件名中的日期复制文件

Xaero先生

尝试根据文件名中包含的日期将范围文件从一个目录复制到另一个目录时遇到问题。文件名中的日期为UTC,而创建的日期为CST。目录中包含的所有文件名都具有类似于以下内容的文件名:

foo_20160227_0015.gif
foo_20160227_0030.gif
.....
.....
foo_20160304_0030.gif
foo_20160304_0045.gif

我尝试使用的脚本如下:

# Variables
strPrevDay=$(date +"%Y%m%d" -d "yesterday")
str7DaysAgo=$(date +"%Y%m%d" -d "7 days ago")
strImgDir="~/Documents/Projects/Radar/Images/"
strTmpImgDir="~/Documents/Projects/Radar/Images/Temp/"
strFileName="foo_"
strFile=

# Copy files created in the last week
for f in $strImgDir$strFileName{$str7DaysAgo..$strPrevDay}*.gif; do cp "$f" $strTmpImgDir; done

然后,脚本运行后,我将收到以下错误消息:

cp: cannot stat ‘/home/user/Documents/Projects/Radar/Images/foo_{20160227..20160304}*.gif’: No such file or directory
吉勒斯“别再邪恶了”

发生此错误的原因是{$str7DaysAgo..$strPrevDay}先扩展括号(因为它不是形式,所以什么也不做),然后扩展变量。这是一个陷阱。{NUMBER1..NUMBER2}

在7天之内,用来枚举日期并非没有道理date请参阅Jeff Schaller的答案

另一种选择是使用eval强制评估以期望的顺序进行。使用eval是容易出错的,因为您需要非常小心要评估两次的部分,但是这里我们有部分文件名已知仅包含数字,因此可以。请注意,如果有几天没有文件生成,则需要打开该nullglob选项

#!/bin/bash
last_day=$(date +"%Y%m%d" -d "yesterday")
first_day=$(date +"%Y%m%d" -d "7 days ago")
eval "all_days=({$first_day..$last_day})"
image_directory=~/Documents/Projects/Radar/Images/
temporary_directory="$image_directory/Temp/"
filename_prefix="foo_"
shopt -s nullglob
for day in "${all_days[@]}"; do
  files=("$image_directory/$filename_prefix$day"*.gif)
  if [[ ${#files[@]} != 0 ]]; then
    cp "${files[@]}" "$temporary_directory"
  fi
done

(我还修复了您的引号-和难以理解的变量名。请注意,VAR="~/something"将波浪号放入VAR,您需要将波浪号不加引号以获取主目录。Bash然后扩展波浪号,因为您使用了无引号的变量扩展名,如果目录名称包含空格或其他Shell特殊字符,则会导致中断–除非您知道有必要,否则不要将变量不加引号。)

一种替代方法是枚举文件,仅复制所需范围内的文件。对于较大范围,这可能会更快,因为每次使用通配符都必须枚举目录中的文件(没有更快的方法来获取与特定模式匹配的文件)。

#!/bin/bash
last_day=$(date +"%Y%m%d" -d "yesterday")
first_day=$(date +"%Y%m%d" -d "7 days ago")
image_directory=~/Documents/Projects/Radar/Images/
temporary_directory="$image_directory/Temp/"
filename_prefix="foo_"
shopt -s nullglob
for file in "$image_directory/$filename_prefix"*.gif; do
  file_date="${file##*/"$filename_prefix"}"; file_date=${file_date:0:8}
  if ((file_date >= first_day && file_date <= last_day)); then
    cp "$file" "$temporary_directory"
  fi
done

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据文件名中的时间戳值复制文件

来自分类Dev

根据文件名中的日期删除和 tar 文件

来自分类Dev

根据文件名中包含的日期查找文件

来自分类Dev

如何根据文件名中的日期删除旧备份?

来自分类Dev

批处理文件以根据文件名复制文件

来自分类Dev

批处理文件可根据文件名中的字符复制文件并远程执行

来自分类Dev

Linux:在两个日期之间复制文件名中带有日期的文件

来自分类Dev

根据文件名中的日期将文件排序到文件夹中?

来自分类Dev

创建子目录并根据文件名中的日期按日期组织文件

来自分类Dev

根据输入列表复制文件,文件名中包含特殊字符

来自分类Dev

是否按文件名中包含的日期/时间顺序复制文件?

来自分类Dev

文件名中包含当前日期的批量复制文件

来自分类Dev

将文件名中包含日期的文件复制到该日期的文件夹中

来自分类Dev

根据文件在R中保存的日期提取文件名

来自分类Dev

创建脚本以根据日期或文件名移动文件

来自分类Dev

Bash:根据文件名中的日期范围查找所有文件

来自分类Dev

根据文件名批处理中的日期字符串移动文件

来自分类Dev

更改文件名中的日期格式

来自分类Dev

复制和重命名文件名中的日期 + 7 天。(电源外壳)

来自分类Dev

数组中每个文件名的php复制文件

来自分类Dev

从文件名复制并插入到文件中

来自分类Dev

Python:根据文件名上指定的日期从文件夹中读取文件并进行排序

来自分类Dev

根据修改日期将 CSV 文件名设置为 jmeter 中的变量

来自分类Dev

根据复杂文件名中的字符串日期对数组进行排序

来自分类Dev

从目录中许多文件的文件名中删除日期

来自分类Dev

根据python中的文件名对文件进行排序

来自分类Dev

根据文件名中的特定模式移动文件

来自分类Dev

根据文件名在python中重命名文件

来自分类Dev

根据文件名中的数字移动文件-python

Related 相关文章

  1. 1

    根据文件名中的时间戳值复制文件

  2. 2

    根据文件名中的日期删除和 tar 文件

  3. 3

    根据文件名中包含的日期查找文件

  4. 4

    如何根据文件名中的日期删除旧备份?

  5. 5

    批处理文件以根据文件名复制文件

  6. 6

    批处理文件可根据文件名中的字符复制文件并远程执行

  7. 7

    Linux:在两个日期之间复制文件名中带有日期的文件

  8. 8

    根据文件名中的日期将文件排序到文件夹中?

  9. 9

    创建子目录并根据文件名中的日期按日期组织文件

  10. 10

    根据输入列表复制文件,文件名中包含特殊字符

  11. 11

    是否按文件名中包含的日期/时间顺序复制文件?

  12. 12

    文件名中包含当前日期的批量复制文件

  13. 13

    将文件名中包含日期的文件复制到该日期的文件夹中

  14. 14

    根据文件在R中保存的日期提取文件名

  15. 15

    创建脚本以根据日期或文件名移动文件

  16. 16

    Bash:根据文件名中的日期范围查找所有文件

  17. 17

    根据文件名批处理中的日期字符串移动文件

  18. 18

    更改文件名中的日期格式

  19. 19

    复制和重命名文件名中的日期 + 7 天。(电源外壳)

  20. 20

    数组中每个文件名的php复制文件

  21. 21

    从文件名复制并插入到文件中

  22. 22

    Python:根据文件名上指定的日期从文件夹中读取文件并进行排序

  23. 23

    根据修改日期将 CSV 文件名设置为 jmeter 中的变量

  24. 24

    根据复杂文件名中的字符串日期对数组进行排序

  25. 25

    从目录中许多文件的文件名中删除日期

  26. 26

    根据python中的文件名对文件进行排序

  27. 27

    根据文件名中的特定模式移动文件

  28. 28

    根据文件名在python中重命名文件

  29. 29

    根据文件名中的数字移动文件-python

热门标签

归档