如何将命令行参数与bash脚本中的find一起使用?

如何将命令行参数与bash脚本中的find一起使用?,bash,find,Bash,Find,我很难使用find命令编写简单的脚本。我想删除某个目录中给定大小的文件。我希望能够指定要删除的文件的名称(如效率?*)和大小。我尝试了以下脚本: #!/bin/bash CD=($pwd) find $CD -name $1 -size $2 -delete 我从正确的目录运行它,如下所示: /path/to/directory/script.sh 'Efficiency_*' '-500c' 但它不起作用 正确的方法是什么?您不需要CD变量,只需使用引用当前目录即可 其他变量需要引用。否则

我很难使用find命令编写简单的脚本。我想删除某个目录中给定大小的文件。我希望能够指定要删除的文件的名称(如效率?*)和大小。我尝试了以下脚本:

#!/bin/bash
CD=($pwd)
find $CD -name $1 -size $2 -delete
我从正确的目录运行它,如下所示:

/path/to/directory/script.sh 'Efficiency_*' '-500c'
但它不起作用


正确的方法是什么?

您不需要
CD
变量,只需使用
引用当前目录即可

其他变量需要引用。否则,shell将展开通配符,而不是将其传递给
find

#!/bin/bash
find . -name "$1" -size "$2" -delete

一般来说,除非有特殊原因,否则应始终引用变量。

您不需要
CD
变量,只需使用
引用当前目录即可

其他变量需要引用。否则,shell将展开通配符,而不是将其传递给
find

#!/bin/bash
find . -name "$1" -size "$2" -delete

一般来说,除非有特殊理由不引用变量,否则应始终引用变量。

问题在于您给CD变量的值。在Bash脚本中,有两种不同的方法将程序调用的输出分配给变量

# method 1
CD=`pwd`

# method 2
CD=$(pwd)

问题是您给CD变量的值。在Bash脚本中,有两种不同的方法将程序调用的输出分配给变量

# method 1
CD=`pwd`

# method 2
CD=$(pwd)


我认为问题在于你被分配到
CD
。为什么在那里使用数组?在哪里设置变量
$pwd
?要调试shell脚本,请将
set-x
放在开头,以便在执行每个命令时看到它。为什么甚至需要该变量?如果要在当前目录中启动,请使用
find.
而不是
find$CD
find-命名为“$1”…
就可以了:)或者如果你坚持:
CD=$(pwd);查找“$CD”-名称“$1”…
我认为问题在于您分配给
CD
。为什么在那里使用数组?在哪里设置变量
$pwd
?要调试shell脚本,请将
set-x
放在开头,以便在执行每个命令时看到它。为什么甚至需要该变量?如果要在当前目录中启动,请使用
find.
而不是
find$CD
find-命名为“$1”…
就可以了:)或者如果你坚持:
CD=$(pwd);查找“$CD”-名称“$1”…
如何运行此脚本?如何在命令行中写入参数?使用单引号还是双引号运行它有关系吗/script.sh“Efficiency_uuu”“-500c”或./script.sh“Efficiency_uuuu”“-500c”?@Suzie,脚本本身实际上无法分辨启动时使用了哪些引号。输入命令的解释器负责将参数分解为C字符串数组,因此在脚本启动时,它会得到一个argv,它(在C语法中)类似于
string[][]{./script.sh”,“Efficiency_”,“-500c”,NULL}
--实际上,无论是用户最初输入的
效率
还是
效率
效率
(或者,当名为
效率
的文件存在时,类似于
效率*
的全局模式),它看起来都完全一样。阅读如何运行此脚本?如何在命令行中写入参数?使用单引号还是双引号运行它有关系吗/script.sh“Efficiency_uuu”“-500c”或./script.sh“Efficiency_uuuu”“-500c”?@Suzie,脚本本身实际上无法分辨启动时使用了哪些引号。输入命令的解释器负责将参数分解为C字符串数组,因此在脚本启动时,它会得到一个argv,它(在C语法中)类似于
string[][]{./script.sh”,“Efficiency_”,“-500c”,NULL}
--实际上,无论是用户最初输入的
效率
还是
效率
效率
(或者,当名为
效率
的文件存在时,类似于
效率*
的全局模式),它看起来都完全一样。阅读……尽管在当前的上下文中,这些都不是特别好的实践
cd=$PWD
比运行子shell(因此,
fork()
ing一个单独的shell副本)来查找当前目录要高效得多。而
find.
通常比
find“$PWD”
好,除非您特别需要
find
来输出完整路径。@tripleee在本例中,我也是,但一般来说,知道这些是很好的——对于更复杂的脚本来说……尽管在当前的上下文中,这些都不是特别好的实践
cd=$PWD
比运行子shell(因此,
fork()
ing一个单独的shell副本)来查找当前目录要高效得多。而
find.
通常比
find“$PWD”
好,除非您特别需要
find
来输出完整路径。@tripleee在本例中,我也是,但一般来说,了解更复杂的脚本是件好事