让 `find` 在 shell 脚本中工作

让 `find` 在 shell 脚本中工作

我猜我忽略了一些简单的事情,因为这似乎应该是一个非常简单的任务,但我做得不够,似乎在论坛上找不到任何东西。

我试图find从 shell 脚本中运行,但它什么也没做。

例如,我有一个文件夹,其中包含一些文件和几个包含文件的子目录:

$ ls *
afile1.txt  anotherfile.py  findit.sh

subdir1:
morefiles1.txt  morefiles2.txt  morefiles3.txt  somescript.py

subdir2:
evenmorefiles1.txt  evenmorefiles2.py  evenmorefiles2.sh

我想使用 find 来提取具有给定搜索字符串的所有文件名(并最终通过管道传输到xargs),但我似乎无法弄清楚为什么完全相同的命令可以在命令行中工作,但不能在 shell 脚本中工作:

$ cat findit.sh 
#!/bin/bash
echo $(which find)
echo "find . -name '"$1"' -print0"
find . -name '"$1"' -print0
echo "nothin??"
$ . findit.sh '*py'
/usr/bin/find
find . -name '*py' -print0
nothin??
$ find . -name '*py' -print0
./anotherfile.py./subdir2/evenmorefiles2.py./subdir1/somescript.py

我很感激在这方面的任何帮助......

答案1

你引用的是双引号,-name '"$1"'。因为您使用单引号,所以该字符串是四个字符的文字,双引号美元第一双引号

但是,即使交换双引号和单引号,-name "'$1'"字符串中仍然会有单引号。因此,如果$1是,dog您将尝试匹配五个字符串'dog'

如果您正在寻找匹配的文件*.py,那么您的脚本设置正确$1,但您想使用这样的表达式

find . -name "$1" -print0

相关内容