Bash shell脚本:未找到f:命令

Bash shell脚本:未找到f:命令,bash,syntax-error,sh,Bash,Syntax Error,Sh,我正在编写一个脚本,在每个目录下查找所有.gz文件。下面的代码在终端中工作,但在执行shell脚本时崩溃 #!/bin/bash # Find all directories in Output directory dirs=($(find ~/Documents/MainDir/$(date +%Y-%m-%d)/Output -type d)) && wait # Concatenate all .gz files in a dir, unzip gzip & r

我正在编写一个脚本,在每个目录下查找所有.gz文件。下面的代码在终端中工作,但在执行shell脚本时崩溃

#!/bin/bash

# Find all directories in Output directory
dirs=($(find ~/Documents/MainDir/$(date +%Y-%m-%d)/Output -type d)) && wait

# Concatenate all .gz files in a dir, unzip gzip & remove unwanted files
for dir in $dirs
do
    if f in $(find . -name "*.gz")
    then
        cd $dir; cat *.gz > output.gz && gunzip -d output.gz && find . -type f -not -name 'output' | xargs rm
    fi
done
起初,我尝试在没有“do”的情况下运行脚本,结果

syntax error near unexpected token `if'
`if f in $(find . -name "*.gz")'
添加do后,我得到以下错误:

f: command not found

如何解决这个问题?Thx

处理此问题的另一种方法是更高级地使用find命令,利用谓词和-exec选项,这可以为遇到的每个匹配文件运行一个命令,例如:

rm$dir/output.gz
查找$dir-name“*.gz”-a-名称“output.gz”-exec cat\{\}>$dir/output.gz&&rm\{\};

(未验证代码)

处理此问题的另一种方法是更高级地使用find命令,利用谓词和-exec选项,这可以为遇到的每个匹配文件运行一个命令,例如:

rm$dir/output.gz
查找$dir-name“*.gz”-a-名称“output.gz”-exec cat\{\}>$dir/output.gz&&rm\{\};

(未经验证的代码)

使用,并且它的
用于。。。如果。。。在
和lrc中,if in$(find.-name“*.gz”)不是一个正确的形式的
if
语句!看一看和@andlrc,我从来没有见过在中的关键字
与OP中的关键字
if
一起使用,也没有在我之前评论的两个链接中使用过。除非您可以提供一个有效的布尔条件
if
语句,该语句也使用了
中的关键字
,否则我可以用它来测试。。。然后我必须坚持我以前的评论。我当然愿意学习,但是我看不到任何正确的
if$(find.-name“*.gz”)
作为
if
语句的正确形式!让我们来看看。
wait
在第一行中没有做任何有用的事情(除非有以前启动的后台作业,并且没有显示);直到命令替换完成,分配才完成,并且没有涉及任何后台作业。请使用,它的
用于。。。如果。。。在
和lrc中,
if in$(find.-name“*.gz”)
不是一个正确的形式的
if
语句!看一看和@andlrc,我从来没有见过在
中的关键字
与OP中的关键字
if
一起使用,也没有在我之前评论的两个链接中使用过。除非您可以提供一个有效的布尔条件
if
语句,该语句也使用了
中的关键字
,否则我可以用它来测试。。。然后我必须坚持我以前的评论。我当然愿意学习,但是我看不到任何正确的
if$(find.-name“*.gz”)
作为
if
语句的正确形式!让我们来看看。
wait
在第一行中没有做任何有用的事情(除非有以前启动的后台作业,并且没有显示);直到命令替换完成,分配才会完成,并且不涉及任何后台作业。