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输出,因为我已经开始把头发扯下来了。也谢谢你提供的额外细节!给了我一些其他功能的灵感!