Linux 循环浏览文件夹和子文件夹中的文件名

Linux 循环浏览文件夹和子文件夹中的文件名,linux,bash,shell,Linux,Bash,Shell,我希望脚本在文件夹和子文件夹中循环,查找包含特定字符串的文件,然后选择重命名文件或任由其运行(即y/n选项),选择后脚本应继续查找 还有一个问题是“语法错误意外标记'fi'”请尝试以下操作: #!/bin/bash #sh j find . -name "*first*" && echo "file found" || echo "file not found" read -p "Run command $foo? [yn]" answer case "$answer"

我希望脚本在文件夹和子文件夹中循环,查找包含特定字符串的文件,然后选择重命名文件或任由其运行(即y/n选项),选择后脚本应继续查找

还有一个问题是“语法错误意外标记'fi'”

请尝试以下操作:

 #!/bin/bash
 #sh j

find . -name "*first*" && echo "file found" || echo "file not found"

read -p "Run command $foo? [yn]" answer

case "$answer" in
y*) find . -type f -exec rename 's/(.*)\/(.*)first(.*)/$1\/beginning_$2changed$3/' {} + ;;

n*) echo "not renamed" ;;
esac
fi

handle\u file
是一个将作为
handle\u函数调用的函数
,因此
可以作为
$0
在函数中使用。

实际上,为什么在函数的末尾放一个
fi
?代码中似乎没有任何
if
。如果要展开变量,需要在重命名表达式中使用双引号。另外,粘贴你的代码片段以跟踪错误。谢谢,它现在可以工作了。但是我仍然有一个问题,代码在第一个案例之后重命名了所有文件。如果你想提示每次重命名,那么你需要循环文件名,或者最好使用
-ok
而不是
-exec+
(您需要
版本,因为您需要
查找
来提示输入每个文件)。
   #bin/bash

   handle_file(){

            local file=$0
            local pattern=some_pattern
            if [[ $(grep -c ${pattern} ${file}) -gt 0 ]];
            then
                    ......................................
                    do anything you want with your ${file}
                    ......................................
            fi
    }
    export -f handle_file

    find . -type f -exec bash -c 'handle_file "$@"' {} \;