Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在BASH中的特定目录中,查找早于X天的子文件夹_Regex_Bash_Find - Fatal编程技术网

Regex 在BASH中的特定目录中,查找早于X天的子文件夹

Regex 在BASH中的特定目录中,查找早于X天的子文件夹,regex,bash,find,Regex,Bash,Find,使用bash命令,我希望找到特定目录中早于X天的所有子文件夹 这是我的目录结构: /usr/my_folder 在我的_文件夹中,我有不同的子文件夹,如: AAAA1 AAAA2 AAAA3 aaaa1 aaaa2 aaaa3 BBBB1 BBBB2 每个文件夹都包含不同的子文件夹,其中包含“我的数据”。例如: 从my_文件夹开始,我需要搜索AAA*和AAA*的所有子文件夹,这些子文件夹的时间超过例如3天。此外,这些子文件夹必须仅位于AAA*和AAA*的MY_DATA文件夹中 我试着

使用bash命令,我希望找到特定目录中早于X天的所有子文件夹

这是我的目录结构:

/usr/my_folder
在我的_文件夹中,我有不同的子文件夹,如:

AAAA1
AAAA2
AAAA3
aaaa1
aaaa2
aaaa3
BBBB1
BBBB2    
每个文件夹都包含不同的子文件夹,其中包含“我的数据”。例如:

my_文件夹开始,我需要搜索AAA*AAA*的所有子文件夹,这些子文件夹的时间超过例如3天。此外,这些子文件夹必须仅位于AAA*AAA*MY_DATA文件夹中

我试着用这个命令,但似乎不起作用

  find aaa* AAA* -type d -regextype sed -regex \".*/MY_DATA/*\" -mtime +3 -print0

观察以下复制机(仅针对GNU版本的
date
touch
进行测试):

这只正确地在其输出上发出
AAA1/MY_DATA/TARGET

请注意:

  • 使用的是
    -path'*/MY_DATA/*'
    ,而不是
    -regex
    ,允许全局样式的模式
  • 只使用语法引号(对shell的指令),而不是文字引号(传递给
    find
    )的数据(文字引号,如
    \“
    ,将成为文件名匹配模式的一部分)
  • 复制者使用
    触摸
    生成一个带有正确日期的目录,允许任何人复制和粘贴上面的代码进行测试

什么不起作用?出现错误?什么都没有?没有结果,没有显示“超过X天”的文件夹“到底是什么意思?很多东西会更新目录的mtime;
stat AAA1/TEST
是否显示了您期望的时间戳?另外,虽然使用
xargs-0
在IFS=read-r-d'
时以编程方式读取输出是正确的,但我建议在测试时只使用
-print
。我还避免使用
-regex
,这太过了<代码>-路径'*/MY_DATA/*'就可以了。
  find aaa* AAA* -type d -regextype sed -regex \".*/MY_DATA/*\" -mtime +3 -print0
# create a directory that should match, and two that should not
mkdir -p AAA1/MY_DATA/TARGET AAA1/MY_DATA/BAD AAA1/ALSO/BAD

# find an adequately conservative date for content that should match
target=$(date -d 'now - 5 days' '+%Y-%m-%d %H:%M')

# update the directory that should match to have that date as its mtime
# ...and also the one that should fail to match due to its name even if mtime is good
touch -d "$target" AAA1/MY_DATA/TARGET AAA1/ALSO/BAD

# Actually run the find command
find AAA* -type d -path '*/MY_DATA/*' -mtime +3 -print