Linux Bash脚本光盘问题
大家好,我的脚本有一些问题。我已经读到,在脚本中更改当前目录有点困难。基本上,我要找的是一个包含项目文件夹和任何子文件夹的php文件。我想将目录更改为该文件夹所在的位置,并对其执行命令。到目前为止没有运气Linux Bash脚本光盘问题,linux,macos,bash,unix,Linux,Macos,Bash,Unix,大家好,我的脚本有一些问题。我已经读到,在脚本中更改当前目录有点困难。基本上,我要找的是一个包含项目文件夹和任何子文件夹的php文件。我想将目录更改为该文件夹所在的位置,并对其执行命令。到目前为止没有运气 function findPHP(){ declare -a FILES FILES=$(find ./ -name \*.php) for file in "${FILES[@]}" do DIR=`dirname file` ( cd $DIR && doSomethin
function findPHP(){
declare -a FILES
FILES=$(find ./ -name \*.php)
for file in "${FILES[@]}"
do
DIR=`dirname file`
( cd $DIR && doSomethingInThisDir &(...))
done
任何帮助都将不胜感激 您试图将
文件作为数组进行迭代,但它只有一个元素。为了将子shell的结果生成一个数组,您可以:
FILES=($(find ./ -name \*.php))
请注意,它会在空格上拆分文件名,因此即使您在下面正确引用,也不会有帮助。或者,您可以将其拆分为以下部分(即使用现有的文件
),然后使用:
for file in $FILES
如果您使用的是bash4
,您可能想看看递归全局搜索。。。这将使它更容易:
for file in **/*.php
请注意,您必须设置globstar
shell选项,您可以使用shopt-s globstar
启用该选项。这种方法更简单,不会破坏空白
此外,您可能需要$file
此处:
DIR=`dirname $file`
或者只使用参数展开:
DIR=${file%/*}
没有理由使用数组,也没有理由存储文件列表。如果您的
find
支持-execdir
(例如gnufind 4.2.27),则使用它。否则,将cd放入子shell,就像您所做的那样:
#!/bin/bash
doSomethingInThisDir() ( cd $(dirname $1); ... )
export -f doSomethingInThisDir
find . -type f -exec bash -c 'doSomethingInThisDir {}' \;
我已经使用
()
而不是{}
定义了函数,但是在这种情况下这不是必需的。通常,使用()
会导致函数在子shell中运行,但在这里无论如何都会发生这种情况,因为find会为每个文件运行单独的进程 与其他(相关)问题一样;发生了什么事?请准确地发布所有相关错误消息,以改进您的问题。