Bash 如何将find与变量和通配符一起使用

Bash 如何将find与变量和通配符一起使用,bash,shell,Bash,Shell,我正在写一个简单的程序,从一个网站的多个页面下载多个图像。当我尝试创建一个命名结构类似于网站布局的文件夹时,我遇到了一些问题。下面是我用来复制其他程序行为的一个简单示例 #/bin/bash #样本输入: # http://testurl.com/post/1234 # http://testurl.com/post/5678 folder=“” 如果[[$1==*“post”*];然后 文件夹=${1##*/} 文件夹=${folder/[$'\t\r\n']} fi 如果[[$(查找“$HO

我正在写一个简单的程序,从一个网站的多个页面下载多个图像。当我尝试创建一个命名结构类似于网站布局的文件夹时,我遇到了一些问题。下面是我用来复制其他程序行为的一个简单示例

#/bin/bash
#样本输入:
# http://testurl.com/post/1234
# http://testurl.com/post/5678
folder=“”
如果[[$1==*“post”*];然后
文件夹=${1##*/}
文件夹=${folder/[$'\t\r\n']}
fi
如果[[$(查找“$HOME”-名称“*$folder*”-打印-退出)];然后
回音“嗨”
其他的
回音“再见”
fi
#示例目录:
#/home/user/1234
#/home/user/0001
我所看到的每一个地方都告诉我这应该运行得很好。然而,这并没有像它应该的那样运行,我已经做了好几个小时了。有人能帮我吗


Bash版本:GNU Bash,版本5.0.3(1)-发行版(x86_64-pc-linux-GNU)

这简化了使用标准
grep
而不是bashism来测试
find
是否找到了什么:

如果找到“$HOME”-键入d-名称“$folder”-打印-退出| grep。;然后
回音“嗨”
其他的
回音“再见”
fi
我还更改了
find
的两个约束:

  • 仅搜索目录:
    -键入d
    • 所以你不会得到普通的文件
  • 仅搜索basename(完整路径的最后一个组件)与
    ${folder}
    完全匹配的路径
    • 因此,您无法获得与
      /home/user/12345
      /home/user/.emacs.d/auto save list/.saves-12350-localhost
出于实际原因(一旦知道脚本可以工作),我会将
grep
的输出重定向到
/dev/null

如果目录都直接位于“${HOME}”中,您还可以添加
-maxdepth 1
作为
find
的第一个参数(以避免递归到子目录中)

所以你最终会得到这样的结果:

如果查找“$HOME”-最大深度1-键入d-名称“$folder”-打印-退出| grep.>/dev/null
然后
回音“嗨”
其他的
回音“再见”
fi
或者简单地使用:

if[-d“${HOME}/${folder}]”;然后
回音“嗨”
其他的
回音“再见”
fi

这简化了使用标准
grep
而不是bashism来测试
find
是否找到了什么:

如果找到“$HOME”-键入d-名称“$folder”-打印-退出| grep。;然后
回音“嗨”
其他的
回音“再见”
fi
我还更改了
find
的两个约束:

  • 仅搜索目录:
    -键入d
    • 所以你不会得到普通的文件
  • 仅搜索basename(完整路径的最后一个组件)与
    ${folder}
    完全匹配的路径
    • 因此,您无法获得与
      /home/user/12345
      /home/user/.emacs.d/auto save list/.saves-12350-localhost
出于实际原因(一旦知道脚本可以工作),我会将
grep
的输出重定向到
/dev/null

如果目录都直接位于“${HOME}”中,您还可以添加
-maxdepth 1
作为
find
的第一个参数(以避免递归到子目录中)

所以你最终会得到这样的结果:

如果查找“$HOME”-最大深度1-键入d-名称“$folder”-打印-退出| grep.>/dev/null
然后
回音“嗨”
其他的
回音“再见”
fi
或者简单地使用:

if[-d“${HOME}/${folder}]”;然后
回音“嗨”
其他的
回音“再见”
fi

您所说的“没有按应有的方式运行”是什么意思?你期望什么行为,你看到什么行为?你首先想做什么?@choroba我期望当程序找到一个包含URL末尾数字的文件夹时看到“Hi”,当它找不到时看到“Bye”。无论输入的数字是否与现有目录名称匹配,我都会看到“Hi”,这对我来说很有用。请尝试在
set-xv
下运行它,以查看找到的内容。您所说的“不按应有的方式运行”是什么意思?你期望什么行为,你看到什么行为?你首先想做什么?@choroba我期望当程序找到一个包含URL末尾数字的文件夹时看到“Hi”,当它找不到时看到“Bye”。无论输入的数字是否与现有目录名称匹配,我都会看到“Hi”,这对我来说很有用。请尝试在
set-xv
下运行它,查看找到了什么。Find太宽,并且找到了包含数字的firefox缓存,因此程序无法运行,因为它一直说目录存在。谢谢你的grep输出,因为我已经开始把头发扯下来了。也谢谢你提供的额外细节!给了我一些其他功能的灵感!Find太宽了,发现firefox缓存中包含数字,因此程序无法运行,因为它一直说目录存在。谢谢你的grep输出,因为我已经开始把头发扯下来了。也谢谢你提供的额外细节!给了我一些其他功能的灵感!