Linux 循环浏览文件夹和子文件夹中的文件名
我希望脚本在文件夹和子文件夹中循环,查找包含特定字符串的文件,然后选择重命名文件或任由其运行(即y/n选项),选择后脚本应继续查找 还有一个问题是“语法错误意外标记'fi'”请尝试以下操作: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"
#!/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 "$@"' {} \;