当其他文件存在于同一目录中时查找文件

当其他文件存在于同一目录中时查找文件

我正在尝试编写“一行脚本”或非常小的 bash 脚本。

它必须找到文件(例如./xxx/one.php),如果该文件存在,则编辑(使用printfecho)同一目录中的其他文件(例如./xxx/test.php)。

现在我做了第二部分 - 编辑现有文件,但我不知道如何或在哪里输入“if”。

其实我有类似的东西

for file in `find . -name "test*.php"` ; do

(printf "It's me, on first line \n and me on second line\n" && cat $file) > "$file".bak && mv "$file".bak "$file"

done

应该是这样的吧?

if [[ `find . -name "one*.php` ]]; do

for file in `find . -name "test*.php"` ; do

(printf "It's me, on first line \n and me on second line\n" && cat $file) > "$file".bak && mv "$file".bak "$file"

done
done

答案1

-execdir这里的选项很find方便:

find -name 'one*.php' -execdir bash -c '
if [ -e test.php ] ; then
    printf ... && mv test.bak test.php
fi' {} \;

-execdir

与 类似-exec,但指定的命令是从包含匹配文件的子目录运行的,该子目录通常不是您开始查找的目录。

-execdir将在找到的文件所在的目录中运行给定的命令,因此test.php它“旁边”的文件将在那里进行操作。在这里,我们在该目录中启动bash并运行一个小脚本来进行您想要的操作。无需复杂的路径操作或重新查找文件。上面我检查了该文件是否存在,但如果它始终存在(或者您想无条件创建它),您可以将其取出if

-execdir是一个 GNU 查找扩展,不在 POSIX 中,但您很可能已经给定了标签。需要注意的是您的PATH环境变量不能包含.或任何其他相对路径(包括空元素),出于安全原因,因此如果您的环境元素是这样,您需要先重置它:PATH=... find ...

相关内容