gpt4 book ai didi

linux - Bash 脚本 : find files with data YY/MM/DAY - variable filename

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:51 25 4
gpt4 key购买 nike

我正在编写一个必须查找文件的 shell 脚本。

特别是文件名是这样的:some_text_years.month.day_hour所以对于我每天有 24 个文件,我的脚本必须找到一天前的文件。

要查找的文件在script.sh所在目录下。

因此,如果今天是 20/08,我的脚本必须找到前一天创建的所有 24 个文件,即。 19.

所以我的脚本看起来像:

#!/bin/bash
base_name="some_text_"
year_mounth=`date +%Y.%m.`
today=$(date +%d)
yestarday=`expr $today - 1`
foo_variable=$base_name$year_mounth$yestarday #concatenation
pattern="$foo_variable*"#concatenation with *
find . -name "$pattern" -exec some commands ..

脚本不工作..我不明白原因.... 也许问题是 * 运算符没有被 find 很好地解释?

相反,在终端中给出的以下命令行可以正常工作

find . -name 'some_text_2014.08.19*'

文件名示例:

  • some_text_2014.08.19_00
  • some_text_2014.08.19_01...

  • some_text_2014.08.19_23

脚本没有输出..它没有给出错误..

谁能帮帮我?

请评论您的回答,以便让我(和其他阅读该帖子的人)了解我在哪里做错了。

请帮助改进我的脚本。不要发布任何其他不同的脚本解决方案。

提前致谢

最佳答案

如果我没理解错的话,你不需要担心文件名中的空格和/或换行符,所以下一个简单的脚本应该可以完成这项工作

prefix="some_"

#generate the pattern for yesterday (current_time - 86400 seconds)
ypatt=$(date --date @$(($(date +%s) - 86400)) +"%Y.%m.%d") #linux - gnu date
#ypatt=$(date -j -f %s $(($(date +%s) - 86400)) +"%Y.%m.%d") #for OS X

find . -print | grep "/${prefix}${ypatt}"

例如对于下一个文件名:

some_2014.08.18_00.txt some_2014.08.19_02.txt some_2014.08.20_10.txt
some_2014.08.18_23.txt some_2014.08.19_05.txt some_2014.08.20_11.txt

将打印

./some_2014.08.19_02.txt
./some_2014.08.19_05.txt

和下一个

find . -print | grep "/${prefix}${ypatt}" | xargs commands -args

将执行命令-args ...found_filenames ...

关于linux - Bash 脚本 : find files with data YY/MM/DAY - variable filename,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25402067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com